java - 查找具有完全相同属性的元素

标签 java eclipse selenium xpath

我正在使用 selenium webdriver 和 java 在 Eclipse 中创建一个测试。我有一个页面,我想在其中单击包含以下代码的按钮:

<button type="button" id="ext-gen1078" class="x-btn-text">Add</button>

问题是,代码中较早使用了完全相同的行(除了 id),因此当我使用以下代码行时,它将单击第一个项目,而我想单击更靠下的一个项目代码页。

driver.findElement(By.xpath("//button[@class='x-btn-text' and text()='Add']")).click();

我无法使用 ID,因为 ID 是自动生成的(很麻烦),因此没有唯一标识符。我尝试对第二个按钮使用完整的 Xpath,但这不起作用,只是太长了。

有没有办法确定这行代码(除了 ID 之外)出现了多少次,然后选择第二个甚至第三个(如果有两个以上)?

========================================

根据@drkthng提供的以下答案,我更新了问题。这是工作代码:

List<WebElement> listOfElements = driver.findElements(By.xpath("//*[@class=' x-btn-text' and text()='Add']"));
System.out.println("There are "+listOfElements.size()+" buttons with the text 'Add'");

if(listOfElements.size() >= 2) {
  listOfElements.get(1).click();
}

这会导致单击正确的按钮并打印: 有 2 个带有“添加”文本的按钮

最佳答案

如果您直接通过xpath搜索第二个按钮:

driver.findElement(By.xpath("//button[@class='x-btn-text' and text()='Add'][2]")).click();

或者既然你问了,你也可以通过元素列表来完成

Is there a way to determine how many times this exact line of code (exact except for the ID) is present

List<WebElement> listOfElements = driver.findElements(By.xpath("//button[@class='x-btn-text' and text()='Add']");

if(listOfElements.size() >= 2) {
  listOfElements.get(1).click();
}

* 如果您使用 xpath 进行索引,则索引从 1 开始。在第二种方法中,索引从 0 开始!

关于java - 查找具有完全相同属性的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33394776/

相关文章:

python - 如何使用 Selenium WebDriver 提取文本输入中输入的文本?

java - AngularJS $http get 返回 null 状态 0

java - 给定 7 张牌,获得所有可能的 5 张牌扑克牌

android - 忽略 JNI C++ 代码中的错误,eclipse

c# - 如何从父元素获取文本并从子元素中排除文本(C# Selenium)

firefox - 关闭 Firefox 13 中的内置 RSS 阅读器

java - 编译错误 - 不兼容的类型

java - 中断从循环调用的方法

eclipse - 为什么 Mylyn 没有从 GitHub 收到问题?

linux - 当我尝试在 linux 中打开 eclipse 时出现错误