我是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>
答案 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相同。所以我们更好地按类名做。