2009-10-08 26 views
21

Web sayfalarındaki öğeleri Selenium kullanarak yerleştirirken çok fazla XPath kullanıyorum ve node1/node2'yi daha yakın bir zamanda node1/descendant :: node2 kullanmaya doğru kullanmaktan vazgeçtim. İki yöntem arasındaki fark nedir? Bir diğerinden daha verimli mi?// düğümünde ve/descendant :: node içinde xpath arasındaki fark nedir?

<div id="books"> 
    <table> 
    <tr><td class="title">Lord of the Rings</td><td class="author">JRR Tolkein</td></tr> 
    <tr><td class="title">The Hitch-Hikers Guide to the Galaxy</td><td class="author">Douglas Adams</td></tr> 
    </table> 
</div> 

Yani olurdu:

Örnek XML pasajı göstermek için

id('books')//td[@class='title']

ya:

id('books')/descendant::td[@class='title']

cevap

24

http://www.w3.org/TR/xpath#path-abbrev

bkz // sadece bir olduğunu d için kısaltma escendant :: eksen

Düzenleme

alıntı:

// para kısadır/descendant-veya-öz :: düğümü()/child :: para

Yani, bu, bağlamsal düğümün bir alt öğesi olan tüm paragraflara veya bağlamsal düğümden gelen herhangi bir düğüme atıfta bulunur. Bunu söyleyebileceğim kadarıyla bağlamsal düğümün herhangi bir alt parasına çevirir.
+1

alındı. Diğerleri için http://www.w3.org/TR/xpath#path-abbrev ilgili bölümdür. Görünüşe göre, // soyundan gelen kişi için kısadır, yani tam olarak aynı değildir.Ayrıca, // node [1] 'in/descendant :: node [1] –

+1

ile aynı olmadığından //' i kullanmaktan uzak kalmamın sebebi de o noktaya kadar genişletilmiştir. // soyundan gelen ya da kendinden değil, soyundan gelen ya da çocuk/çocuk .... bana torun gibi korkunç bir şey gibi görünüyor. –

+0

Anlaşmalı. Iyi kaydetti. :) –

2

Farklılık dışında, herhangi bir farkın farkında değilim.

8

Bağlam grubunda bir fark var. //para[1], ebeveyninin ilk çocuğu olan her paragrafı döndüren /descendant-or-self::node()/child::para[1] için kısadır. /descendant::para[1], tüm alt ağacın yalnızca ilk parasını döndürür.

id('books')/descendant::td[@class='title'] 

dönüş aynı sonucu: Senin durumunda

id('books')//td[@class='title'] 

ve de

+0

Ayrıca (// para) [1] de çalışmalı fakat Selenium 1'de bulunmamalı, böylece/descendant :: para [1] 'i kullanmalısınız. Bağlam grubunun // node [1] ve/descendant :: node [1] arasında nasıl farklı uygulandığını bilen var mı? –

4

.

Ancak aslında, daha önce de belirtildiği gibi, id('books')//td[@class='title'], id('books')/descendant::td[@class='title'] konseptinden farklı olan id('books')/descendant-or-self::node()/td[@class='title'] anlamına gelir.

NOT:

aşağıdaki nota bakınız konumu yolu // para [1] konumu yolu/descendant :: para ile aynı anlamına gelmez [1]. İkincisi, ilk soyundan gelen para elemanını seçer; Birincisi, ebeveynlerinin ilk para çocuğu olan tüm alt para unsurlarını seçer.

bu not ben istemeden önce TR dolaştılar gerekirdi http://www.w3.org/TR/xpath#path-abbrev

İlgili konular