如何关联两个相等的子元素?

时间:2013-10-14 17:36:08

标签: java selenium

我需要找到以下元素:

String myString = driver.getElement(By.xpath("//tr//input[name='ID1']//td[3]//b")).getText();

但是这不起作用,因为<input and <td元素是<tr的相同子元素。我必须使用<input来查找此元素。我怎么能这样做?

<input type="hidden" name="ID1" value="87660">

<td class="mainCtr" valign="top">

    <input type="checkbox" id="trans2660" onclick="doIndividual(this);"> 

    <a href="javascript: .............
    </a>

</td>

<td class="mainCtr" valign="top">

</td>

<td class="mainLt" valign="top">
  <b>Grovl</b><br>
  3<br>
 </td>
<td class="maowsLt" valign="top">
  7052<br>
  L323<br>

3 个答案:

答案 0 :(得分:1)

你可以做几件事

1。您可以使用“follow-sibling”。

我没有足够使用此属性为其发布代码,但您可以在此处查找https://www.google.com/search?q=xpath+following-sibling&oq=follow+siblin&aqs=chrome.1.69i57j0l3.3639j0j7&sourceid=chrome&espv=210&es_sm=122&ie=UTF-8

2。获取输入的父级并找到第3个td

WebElement inputElement = driver.findElement(By.xpath("//tr//input[name='ID1']"));
WebElement parent = inputElement.findElement(By.xpath(".."));
String myBoldText = parent.findElement(By.xpath("//td[3]//b")).getText();

答案 1 :(得分:1)

您可以使用..上升一级。

假设我们有这样的HTML:

<ul>
    <li class="sibling">Stuff</li>
    <li class="target">Target</li>
</ul>

我们可以通过它的兄弟“sibling”找到带有“target”类的list元素,如下所示:

//ul/li[@class="sibling"]/../li[@class="target"]

答案 2 :(得分:0)

如果使用cssSelctors会更好,

String myString = driver.getElement(By.cssSelector("input[name='ID1'] td.mainLt>b")).getText();

UI更改频繁,因此对于自动化测试用例,我建议您选择cssSelector over xpath ..

click here for more info about cssSeletors