【发布时间】:2021-05-11 16:34:01
【问题描述】:
我正在尝试单击动态表行中锚标记内的 i 标记中的类属性找到的元素的所有实例。具体来说,它的一行有几个单元格,在最后一个单元格中,有一系列 4 个链接,其中一个和 X 或一个 O。如果正方形是 X,则可以单击它,稍等片刻后,它会变为 O。链接写如下:
<a class="foobar"><i class="dontNeedToClick"><i></a>
<a class="foobar"><i class="dontNeedToClick"><i></a>
<a class="foobar"><i class="needToClick"><i></a>
<a class="foobar"><i class="dontNeedToClick"><i></a>
当点击 needToClick 元素时,该类将变为 dontNeedToClick 元素 在包含数千个 O 的数据库中只有不到一百个 X 可以滚动,因此自动点击它们会节省大量时间。我可以成功计算元素出现在表中的实例,但是当我使用 .findElements() 将元素放入 List 对象并尝试遍历它时,我得到 ElementNotVisibleException。
到目前为止,这是我的示例代码:
// get the count of thumbs down accounts
int elementsCount= driver.findElements(By.className("needToClick")).size();
System.out.println("Amount of elements: " + elementsCount);
// loop and click through all elements found
for (int x = 0; x < elementCount; x++) {
List<WebElement> elements = driver.findElements(By.className("needToClick"));
WebElement client = elements.get(x);
client.click();
Thread.sleep(5000);
}
我尝试使用 Iterator 并得到相同的异常。
Iterator<WebElement> clickElement = elements.iterator();
while (clickElement.hasNext()) {
clickElement.next().click();
}
我也尝试过使用 foreach 循环。
List<WebElement> thumbsDown = driver.findElements(By.className(expectedClass));
for(WebElement element : thumbsDown) {
element.click();
}
我会使用 xpath,但我对动态表不是很有经验,并且无法找到一种方法来获取包含我正在寻找的元素的行以及与之相关的其他元素并计算出小于优雅的方法,例如仅通过类名查找所有元素就足够了。将不胜感激。
【问题讨论】:
-
您是否错过了这一行
List<WebElement> elements = driver.findElements(By.className("needToClick));的双引号?我添加了一条评论,因为我认为这不是您的问题的原因,因为您无法使用缺少的双引号进行编译。 -
这是一个拼写错误,将代码概括为非特定于我的用途。感谢您指出,但是是的,代码符合并运行,直到向我抛出异常。
-
您应该尝试运行调试器以查看异常发生的时间,(例如:循环第一次执行时或稍后的某个时间)。有可能是 click 事件修改了元素列表,所以 findElements 找不到它。
-
这是 chrome/firefox 功能还是 Eclipse?感谢您的建议。
-
我的意思是调试你的java代码,因为
ElementNotVisibleException是由findElements函数抛出的。如果稍后在for循环中抛出,可能是第一次点击修改列表,所以在后面的迭代中找不到类needToClick。
标签: java selenium selenium-webdriver