如何使用Selenium的标准CSS选择器(nth-of-type或nth-child)选择嵌套元素?

时间:2013-05-14 21:18:50

标签: css selenium selenium-webdriver css-selectors

如何使用nth-child或nth-of-type选择B(或C)的段落标记?我使用的是Selenium WebDriver。

<tr>
    <td>
        <p class="myClass">A</p>
    </td>
</tr>
<tr>
    <td>
        <p class="myClass">B</p>
    </td>
</tr>
<tr>
    <td>
        <p class="myClass">C</p>
    </td>
</tr>

背景:我正在尝试使用Selenium WebDriver自动化测试,并且由于nth(i)仅适用于IDE,我正在尝试确定如何使用标准CSS选择器来获取元素。

选择第一个元素时,它可以工作,但在选择第n个元素时则不行。我认为这是由于嵌套造成的 这不起作用:
.myClass:nth-​​of-type(2)(未找到定位符,根据Selenium IDE)
.myClass:nth-​​child(2)(根据Selenium IDE找不到定位器)

5 个答案:

答案 0 :(得分:4)

这适用于Selenium WebDriver:

String css = ".myClass";
List<WebElement> list = driver.findElements(By.cssSelector(css));
WebElement e = list.get(n);

这不太理想,但它确实有效。

答案 1 :(得分:1)

不是:contains()css选择器函数吗?

driver.FindElements(By.cssSelector("p.myClass:contains('B')"));

答案:不,因为:contains()是一个JQuery伪函数。

如果您使用的是C#,请导入SizSelCsZzz for JQuery功能。然后你可以这样做: driver.FindElements(new ByJQuery.ByJQuerySelector("p.myClass:contains('B')", true));

另外,对于nth-child,它也是一个JQuery伪函数。类似地:

using SizSelCsZzz;

namespace YourNamespaceHere
{
   public class YourClass
   {
      By selectB = new ByJQuery.ByJQuerySelector("p.myClass:nth-child(2)", true);
   }
}

答案 2 :(得分:0)

使用此选项选择B:

table tr:nth-child(2) td p {/*your styles here */}

答案 3 :(得分:0)

我不知道selenium(所以这可能没用),但是如果你需要使用标准的CSS选择器,你可以像这样选择'C':

table tr + tr + tr > td > p {color:blue;}

答案 4 :(得分:0)

p标签没有兄弟元素,因为它们位于不同的列上。尝试在tr标记上使用nth-child伪类。例如,要更改奇数行的背景:

table tr:nth(odd){
    background-color: #color-code;
}