按类的findElement,其中content等于text

时间:2015-09-28 13:22:43

标签: java eclipse selenium-webdriver

我正在尝试找到并单击页面上的元素但不能使用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();

额外信息:可能是因为我正在寻找一个位于弹出窗口中的元素?

1 个答案:

答案 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)