2012-01-11 157 views
1

我使用硒來測試我的webapp與chromedriver,但硒似乎無法找到我想要的元素。無法使用硒查找html元素

我查詢的HTML是:

<table> 
    <thead><thead> 
    <tbody> 
    <tr> 
     <td></td> 
     <td> 
      <span class="class1"> 
      <span>Test text</span> 
      </span> 
      <ul> 
      <li class="class2"><a href="#">Edit</a></li> 
      <li class="class2"><a href="#">Remove</a></li> 
     </ul> 
     </td> 
    </tr> 
    </tbody> 
</table> 

我想選擇的Web元素:

<a href="#">Edit</a> 

我曾嘗試以下使用CSS選擇器:

table > tbody > tr:first-child > td:nth-child(2) > ul > li:first-child > a 

和使用XPath的相同類型的查詢:

//table/tbody/tr/td/following-sibling::td[1]/ul/li/a 

當我調試這個,並使用quickwatch動態修改查詢這兩個查詢工作,直到我嘗試並選擇ul;例如:

table > tbody > tr:first-child > td:nth-child(2) 

AND

//table/tbody/tr/td/following-sibling::td[1] 

兩者正確地選擇包含UL正確TD中的內容。當我嘗試讓他們中的任何一個獲得ul時,每個選擇都將變爲null。

所以我有兩個問題,爲什麼我不能使用CSS選擇器或XPath選擇ul元素,還有另一種技術可以用來選擇列表中的第一個標籤與文本「編輯」。

乾杯

回答

1

真的不知道爲什麼你添加後ul,但試試這個CSS選擇器來替代你的選擇將打破:

table > tbody > tr:first-child > td:nth-child(2) li.class2:first-child > a 

或者,這相當於XPath表達式:

//table/tbody/tr/td[2]//li[@class="class2"][1]/a 
2

試試

//table/tbody/tr/td[2]/ul/li[1]/a

//a[text()='Edit']

(如果不會有這種文字當前頁面上的多個鏈接)

0

如果你更舒適的使用CSS選擇器,請上網:table tbody tr:first-child ul li:contains('Edit') a

0

'//table//li/a[text()="Edit"]'

以下是ipython會話示例:

In [1]: from lxml import etree 

In [2]: html = """ 
    ...: <table> 
    ...: <thead><thead> 
    ...: <tbody> 
    ...:  <tr> 
    ...:  <td></td> 
    ...:  <td> 
    ...:   <span class="class1"> 
    ...:    <span>Test text</span> 
    ...:   </span> 
    ...:   <ul> 
    ...:    <li class="class2"><a href="#">Edit</a></li> 
    ...:    <li class="class2"><a href="#">Remove</a></li> 
    ...:   </ul> 
    ...:  </td> 
    ...:  </tr> 
    ...: </tbody> 
    ...: </table> 
    ...: """ 

In [3]: t = etree.fromstring(html, parser=etree.HTMLParser()) 

In [4]: t.xpath('//table//li/a[text()="Edit"]') 
Out[4]: [<Element a at 101c83b50>] 

In [5]: a = t.xpath('//table//li/a[text()="Edit"]')[0] 

In [6]: a.text 
Out[6]: 'Edit' 

In [7]: a.attrib 
Out[7]: {'href': '#'}