如何选择具有相同data-testid的下拉项

时间:2018-02-13 01:35:52

标签: c# html selenium xpath selenium-webdriver

我试图让selenium点击下拉菜单中的一个选项。有几个选项,看起来它们唯一独特的东西是链接文本。他们都有'数据证明',他们都是一样的。 有人在下拉列表中看到了点击特定选项的方法吗?

以下是下拉列表中的一些选项示例:(应用安装和潜在客户生成)

<li class="" data-testid="ads-mini-grouped-objective-selector-option" style=""><div aria-checked="false" aria-disabled="false" class="_2wpb _3v8w" data-testid="SUISelectorOption/container" role="menuitem" style="letter-spacing: normal; color: rgb(75, 79, 86); font-size: 12px; font-weight: normal; font-family: Arial, sans-serif; line-height: 16px; padding: 6px 24px 6px 32px;" tabindex="-1"><span class="_27_z _4s-j" style="margin-left: 0px; margin-right: 8px;"></span><div class="_3leq"><span>App installs</span></div></div></li>

<li class="" data-testid="ads-mini-grouped-objective-selector-option" style="background-color: rgba(29, 33, 41, 0.08);"><div aria-checked="false" aria-disabled="false" class="_2wpb _3v8w" data-testid="SUISelectorOption/container" role="menuitem" style="letter-spacing: normal; color: rgb(75, 79, 86); font-size: 12px; font-weight: normal; font-family: Arial, sans-serif; line-height: 16px; padding: 6px 24px 6px 32px;" tabindex="-1"><span class="_27_z _5da8" style="margin-left: 0px; margin-right: 8px;"></span><div class="_3leq"><span>Lead generation</span></div></div></li>

我试图通过链接文字进行选择,但这不起作用。

4 个答案:

答案 0 :(得分:1)

要点击下拉列表中的选项,您可以将函数编写为clickOption(),如下所示:

public void clickOption(String option)
{
    driver.FindElement(By.XPath("//li[@data-testid='ads-mini-grouped-objective-selector-option']//span[.='" + option + "']")).Click();
}

现在,在您的main()或@Test注释类中,使用您要选择的选项调用函数clickOption()方法,如下所示:

clickOption("App installs");
//or
clickOption("Lead generation");

答案 1 :(得分:0)

driver.findElement(By.xpath("(//li[@data-testid='ads-mini-grouped-objective-selector-option'])[2]")).click();

尝试使用此xpath单击具有相同data-testid的第二个数据:

答案 2 :(得分:0)

您可以使用XPath按属性li和内部文本选择data-testid元素:

//li[@data-testid='ads-mini-grouped-objective-selector-option' and .='Lead generation']

答案 3 :(得分:0)

har07答案是一个很好的答案, 你也可以尝试这个选项

//*[text()='App installs']/parent::div/parent::div/parent::li

因为并非所有html都被给出,所以这是我唯一可以获得的选项