循环遍历DIV并从内部的两个不同元素中选择值的方法

时间:2016-12-23 05:32:23

标签: c# selenium selenium-webdriver selenium-chromedriver

我有一系列像这样的DIV

<div id="item-14620">
<div>
<span class=""/>
<table border="0" width="100%" height="250">
<tbody>
<tr align="center">
<tr>
<tr>
<tr>
<tr>
    <td valign="top" title="some data here"></td>
    <td valign="top"><strong>some value here</strong> </td>
    <td valign="top" title="">
    <td valign="top">  </td>
</tr>
<tr>
<tr>
</tbody>
</table>
</div>
<div class="printThisItem">
</div>

同一DIV列表中的另一个DIV

<div id="item4569" >
<div>
<span class=""/>
<table border="0" width="100%" height="250">
<tbody>
<tr align="center">
<tr>
<tr>
<tr>
    <td valign="top" title="some other data here"></td>
    <td valign="top"> <strong>Some other value</strong> </td>
    <td valign="top" title="">
    <td valign="top">  </td>
</tr>
<tr>
<tr>
<tr>
</tbody>
</table>
</div>
<div class="printThisItem">
</div>

我正在使用像这样的xpath

...FindElements(By.XPath(".//*[starts-with(@id,'item')]/div[1]/table/tbody/tr[4]/td[2]/strong"))

返回元素列表,但只获取DIV列表第4行的值。有些div在第5行有所需数据,有些在第4行有。如何遍历所有div并从第4行获取值,其中数据在第4行,第5行从数据第5行获取值?

我想过迭代div两次,一次是XPath中的tr[4],第二次是tr[5],但我还需要找到它们的顺序。通过一次执行一行,我获得列表中的所有tr[4]项,然后是所有tr[5]项。但这不是它们在页面中的布局方式。第4行可能有3个项目,第5行可能有下3个,第4行可能有下6个。我也需要保持秩序。

我正在使用Selenium 2.53

2 个答案:

答案 0 :(得分:1)

此xpath应该会在任何td

下为您提供包含strong的任何第二个tr
.//*[starts-with(@id,'item')]/div[1]/table/tbody/tr/td[2]/strong

所以,即使strong在任何一行,你也会得到它。

答案 1 :(得分:0)

试试这个xpath - //div[contains(@id,'item')]//table//tr[4 or 5]/td")。这将根据显示顺序为您提供td标记中的数据。