java - Selenium By.className() -> IndexOutOfBoundsException : Index: 0, 大小:0

标签 java selenium browser-automation

我正在为网站编写一个自动化应用程序。因此我需要转向没有 ID 的 HTML 元素。我听说 xPath 和 CSS Selector 不是那么快,这就是为什么我想更改为 By.className()。不幸的是我这不起作用。您可以在下面找到一个演示(实际工具不是自动化 google :D)。

我正在使用 GeckoDriver 0.21.0 和 Selenium 3.13.0

WebDriver d = new FirefoxDriver();
JavascriptExecutor js = (JavascriptExecutor) d;  
d.get("https://www.google.com");
WebElement we = d.findElements(By.className("gLFyf gsfi")).get(0);
js.executeScript("arguments[0].value='test';", we);

HTML Element

最佳答案

如果该类名称正确且稳定(在我看来它是生成的,这意味着每次加载页面时都会有不同的类名称,这一更改会破坏您的脚本),我建议使用

WebElement we = d.findElements(By.cssSelector(".gLFyf.gsfi")).get(0);

正如另一个答案所示,By.className() 可能会被类名中的空格混淆。

关于java - Selenium By.className() -> IndexOutOfBoundsException : Index: 0, 大小:0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54873279/

相关文章:

java - 选择与Java交互的线程

java - 隐藏 Android 操作栏?

java - 从对象映射到动态字符串

.net - 集成(Selenium)测试后回滚数据库

javascript - Nightwatch 中的 setValue 方法不起作用

selenium - 如何使用 Selenium 自动化 Firefox Mobile?

html - 使用 mechanize::phantomjs 选择单选按钮时出现 "element does not exist in cache"错误

Collections<Integer>.stream() 的 Java8 IntStream 不兼容返回类型

python - 我如何在 python 中实现此功能?

javascript - Nightmarejs .click() 在每个元素上有延迟