2012-01-11 5 views
1

セレンを使用してクロムドライバでウェブアプリケーションをテストしていますが、セレンは私が望む要素を見つけることができないようです。セレニウムを使用して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 

これをデバッグしてクイックウォッチを使用してクエリを動的に変更すると、ulを選択して選択するまで両方のクエリが機能します。例えば:

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

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

の両方が正しくULを含む正しいTDの内容を選択します。それらのどちらかをulにすると、各選択はnullになります。

私は2つの問題があります。なぜ、CSSセレクタまたはXPathを使用してul要素を選択できないのですか?テキスト「編集」でリストの最初のタグを選択するために使用できる別の方法があります。

乾杯なぜあなたの選択はあなたがulを追加した後破るが、代替として、このCSSセレクタをしようと

答えて

1

本当にわからない:

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
あなたはCSSセレクタとより快適なら

または

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

(現在のページにこのテキストをより多くのリンクがありません場合)

0

は、チェックアウト: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': '#'} 
関連する問題