3

如何使用 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)

4

5 回答 5

4

这适用于 Selenium WebDriver:

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

这并不理想,但它有效。

于 2013-05-14T22:02:30.367 回答
1

:contains() CSS 选择器功能不适合您吗?

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

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

如果您使用的是 C#,请为 JQuery 功能导入 SizSelCsZzz。然后你可以这样做: 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);
   }
}
于 2014-08-04T20:36:42.223 回答
0

使用它来选择 B:

table tr:nth-child(2) td p {/*your styles here */}
于 2013-05-14T21:23:17.633 回答
0

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

table tr + tr + tr > td > p {color:blue;}
于 2013-05-14T21:25:20.057 回答
0

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

table tr:nth(odd){
    background-color: #color-code;
}
于 2013-05-14T21:32:57.030 回答