【问题标题】:Selenium handling duplicate xpaths of same type in javaSelenium 在java中处理相同类型的重复xpath
【发布时间】:2017-01-10 22:45:13
【问题描述】:

我正在尝试根据输入从下拉菜单中动态选择项目。除非值共享一个名称,否则这并不是真正的问题。例如,如果这是我的 Cucumber 语句

 When I go to the "Inventory" / "Inventory" application

当我调用这个方法时:

@When("^I go to the \"([^\"]*)\" / \"([^\"]*)\" application$")
public void i_go_to_the_application(String hoverMenu, String subMenuName) throws Throwable {
        Actions actions = new Actions(driver);
    WebElement menuHoverLink = driver.findElement(By.linkText(hoverMenu));
    actions.moveToElement(menuHoverLink);
    Thread.sleep(1000);
    WebElement submenu = driver.findElement(By.xpath("//span[.='" + subMenuName + "']"));

    actions.moveToElement(submenu);
    actions.click().perform();
    Thread.sleep(4000);

我的测试崩溃了,因为它找不到 subMenuElement。如果菜单名称不同,例如 Inventory > Items,则此代码可以正常工作。

现在我已经检查了这个问题 Selenium: handling multiple inputs with same xpath

但是提供的解决方案似乎没有帮助,因为这两个元素都在下拉菜单中,其中一个是该下拉菜单的子菜单:库存 > 库存

我通过 selenium IDE 运行了这个,无论我尝试了多少种方法来“找到” Inventory 元素,它都只能找到一个项目。由于我的测试用户可以从下拉菜单和随后的子菜单中选择任意数量的项目,因此我不能依赖 ID。有没有办法确定选择第一个菜单项,然后选择子菜单项。

【问题讨论】:

  • 你能分享一下这个菜单和子菜单的 HTML

标签: java selenium xpath cucumber


【解决方案1】:

将其从部分链接文本更改为 xpath 搜索

WebElement menuHoverLink = driver.findElement(By.linkText(hoverMenu));

到下面

WebElement menuHoverLink = driver.findElement("//a[.='" + hoverMenu + "']");

您只需要两个不同的 xpath,因此即使名称相同,您也会得到结果。

【讨论】:

  • 我试过这种方法,两次都找到了相同的元素。我在扫描元素 ID 并使用 !comparison 查找其他元素的地方进行了一些小改动。
【解决方案2】:

似乎 submemu Inventory 元素存在于主菜单 Inventory 元素中。然后你应该尝试在主菜单上下文中找到 submemu 元素,如下所示:-

Actions actions = new Actions(driver);
WebElement menuHoverLink = driver.findElement(By.linkText(hoverMenu));
actions.moveToElement(menuHoverLink);

WebElement submenu = new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfNestedElementLocatedBy(menuHoverLink, By.xpath(".//span[.='" + subMenuName + "']")))

actions.moveToElement(submenu);
actions.click().perform();

【讨论】:

  • 这仍然返回顶级项目。
  • menuHoverLink.findElement(By.xpath(".//span[.='" + subMenuName + "']")); 的身份尝试过一次,然后告诉我..
猜你喜欢
  • 2015-06-12
  • 1970-01-01
  • 2013-09-02
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多