我正在尝试找到并单击页面上的元素但不能使用by.id方法,因为生成了id并且每个会话都会更改。对于大多数元素,我可以通过使用xpath解决这个问题,但是有一个下拉菜单,这不起作用。我可以单击包含下拉列表的元素,它会显示选项。如果我找到我需要的元素并复制它的xpath,测试用例将无法正常工作,说明它无法找到xpath。现在旁边的id我想要点击的元素也有一个类。问题是这个类不是唯一的,下拉列表中的所有菜单项都有相同的类和不同的文本。我想做的是:
driver.findeElement(By.class("x-menu-item-text").equals("Unique text 1here").click()
类“x-menu-item-text”不是唯一的,但此特定类中的文本是。我无法使用ID,因为这是自动生成的。我想要点击的项目或元素的完整代码是:
<a id="ext-comp-1035" class="x-menu-item" hidefocus="true" unselectable="on" href="#"><span id="ext-gen250" class="x-menu-item-text">Unique text 1 here</span></a>
<a id="ext-comp-1035" class="x-menu-item" hidefocus="true" unselectable="on" href="#"><span id="ext-gen250" class="x-menu-item-text">Unique text 2 here</span></a>
我正在使用Selenium Webdriver和Eclipse(Java)。
虽然提供的答案似乎适用于大多数页面和位置,但是有一种情况我无法让它工作。任何人都可以建议吗? 有一个带按钮的页面,我想点击其中一个按钮。如果我使用以下声明:
driver.findElement(By.xpath("//*[@class=' x-btn-text' and text()='Add']")).click();
我收到错误消息
org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
如果我查看来源,我会看到:
<button class=" x-btn-text" id="ext-gen539" type="button">Add</button>
因此元素存在且可见。 我尝试在click语句之前添加wait.until语句,但这也不起作用:
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@class=' x-btn-text' and text()='Toevoegen']")));
driver.findElement(By.xpath("//*[@class=' x-btn-text' and text()='Toevoegen']")).click();
额外信息:可能是因为我正在寻找一个位于弹出窗口中的元素?
答案 0 :(得分:2)
您可以使用xpath定位器 https://newcircle.com/bookshelf/selenium_tutorial/locators
By.xpath(&#34; // span [@class =&#39; x-menu-item-text&#39; and text()=&#39; Unique text 1here&#39;]&# 34)