我需要在 Linux 机器上运行 Selenium 并使用 HtmlUnitDriver 来实现这一点。
Selenium 脚本包含大部分 Xpath 来查找元素。运行时,NoSuchElementException 会显示在使用 xpath 的位置。
org.openqa.selenium.NoSuchElementException: Unable to locate a node using //*[contains(text(),'Sample Text')]
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
相同的代码适用于 Chrome、Firefox 或 IE 等其他驱动程序。
我的代码如下所示,
HtmlUnitDriverdriver = new HtmlUnitDriver();
driver.setJavascriptEnabled(true);
driver.get("http://example.com");
driver.findElement(By.id("username")).sendKeys("xxx");
driver.findElement(By.id("password")).sendKeys("yyy");
driver.findElement(By.id("loginButton")).click();
Thread.sleep(2000);
driver.findElement(By.xpath("//*[contains(text(),'Sample Text')]")).click();
我发现了许多类似的问题,解决方案是提供睡眠时间或等待元素直到它被加载。我提供了一切,但在使用 xpath 时仍然面临这个问题。
在我的用例中也无法通过 ID 或名称查找元素,因为它每次都不同。
我只能使用 xpath 来查找 span 标签内的文本。
我需要一个解决方案来处理这个问题。提前致谢!
编辑 :
我尝试了相同的gmail登录,仍然遇到同样的问题,
driver.get("http://www.gmail.com");
driver.findElement(By.id("Email")).sendKeys("xxx@gmail.com");
driver.findElement(By.id("next")).click();
Thread.sleep(2000);
driver.findElement(By.id("Passwd")).sendKeys("yyy");
driver.findElement(By.id("signIn")).click();
Thread.sleep(8000);
driver.findElement(By.xpath("//*[contains(text(),'COMPOSE')]")).click();