我如何在Selenium Webdriver中找到这个webelement?

时间:2016-03-31 11:13:58

标签: java selenium xpath

我的问题是在我的网页上找到一个复选框元素。我使用Selenium webdriver与Eclipse,TestNG和Java作为选择的语言。

检查checkbox元素会给我以下内容:

<input type="checkbox" data-privid="13" data-priviligeeid="406">

我尝试使用以下xpath代码,其中字符串是从Chrome浏览器中的元素复制的xpath。我添加了引号的转义字符:

WebElement ChangeButton = driver.findElement(By.xpath("[@id=\"privs\"]/div[1]/div[2]/label/input"));

但这样做会让ChangeButton变空。

我也尝试循环遍历数组,直到找到一个特定的data-privid值:

ArrayList<WebElement> inputs  =(ArrayList<WebElement>)driver.findElements(By.tagName("input"));     

      if(inputs != null) {

          for(WebElement checkbox : inputs) {
              String attribute = checkbox.getAttribute("data-privid");
              System.out.println(attribute);

              ....
}
}

这也不起作用,因为属性永远不会得到任何值。

我有什么想法可以解决这个问题吗?

编辑:这已经解决了!

你的解决方案起初对我不起作用的原因是因为我在属于一个类的方法中导航,而在第二个类中抓取了web元素。我试图将它们组合在一个xml文件中,但出于某种原因,当定位器类试图做它的事情时,我最终得到了错误的url。谢谢大家提供答案。我选择了css定位器,效果非常好。

3 个答案:

答案 0 :(得分:0)

尝试以下XPath

//input[@type='checkbox' and @data-privid='13']

希望它会对你有所帮助:)。

答案 1 :(得分:0)

无需使用XPath。 CSS选择器更方便。试试这个:

driver.findElement(By.cssSelector("input[type='checkbox'][data-privid='13']"));

答案 2 :(得分:0)

您的xpaht表达式"[@id=\"privs\"]/div[1]/div[2]/label/input" 无效 似乎您尝试在第一步找到id="privs"的元素,这将是:"*[@id='privs']"或(如果此元素是div,则更好)"div[@id='privs']"

然后您的xpath可能如下所示:

"div[@id='privs']/div[1]/div[2]/label/input"