繁体   English   中英

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

[英]How to identify an element in selenium even if xpath is same

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

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

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

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

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

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]})

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

为此方案添加DOM

<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>

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

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

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

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

以下CSS可以工作;

form.auto_fs_steps_checkbox input

不需要使用链接,因为这可以在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"));

第二次提交的xpath将是

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM