即使xpath相同,如何识别硒中的元素

时间:2014-06-18 07:02:22

标签: java html selenium xpath

我是selenium的新手,并试图在junit框架中自动化一个Web应用程序。由于许多人在识别Web元素时遇到了一些问题,我也陷入了两个提交按钮具有相同xpath和css选择器的位置。

我能观察到的唯一区别是..在两个表单标签中,我可以看到className是不同的(对于第一个表单标记,它是"feature_space_checkbox",对于第二个表单标记,它是" { {1}})

因为,我需要确定第二个提交按钮。所以我尝试识别第二个提交按钮,如下所示

auto_fs_steps_checkbox"

当我尝试执行此操作时,我收到错误

driver.findElement(new ByChained(By.className("auto_fs_steps_checkbox"),By.xpath("//*[@id='edit_brochure_2863']/input[3]")));

任何人都可以在我犯错的地方纠正我

为此方案添加DOM

org.openqa.selenium.NoSuchElementException: Cannot locate an element using By.chained({By.className: auto_fs_steps_checkbox,By.xpath: //*[@id='edit_brochure_2863']/input[3]})

对于第二个提交按钮,它是..

<form action="/brochures/2865/feature_space_checked" class="feature_space_checkbox" id="edit_brochure_2865" method="post"><div style="margin:0;padding:0">
    <input name="commit" type="submit" value="Submit">
  </form>

3 个答案:

答案 0 :(得分:2)

首先,XPath和CSS选择器不是确定的。页面上的每个元素都有许多XPath和CSS,所以说它们具有相同的Xpath和CSS选择器是不正确的。

对于您的示例,是否需要使用XPath或组合两个选择器?

以下CSS可以使用;

form.auto_fs_steps_checkbox input

答案 1 :(得分:1)

不需要使用链接,因为这可以在XPath中表达:

//*[@id='edit_brochure_2863' and @class='feature_space_checkbox']/input

所以这将是Java:

driver.findElement(By.xpath("//*[@id='edit_brochure_2863' and @class='feature_space_checkbox']/input"));

当然,对于第二个提交按钮,它将是

driver.findElement(By.xpath("//*[@id='edit_brochure_2863' and @class='auto_fs_steps_checkbox']/input"));

答案 2 :(得分:0)

第二次提交的xpath将是

  driver.findElement(By.xpath("//form[@class='auto_fs_steps_checkbox']/input"));

这足以识别第二个按钮,因为此类名称是唯一的,并且两者的id相同。所以我们更好地按类名做。