我正在尝试使用PhantomJSDriver
。以下代码适用于
FirefoxDriver
但不适用于PhantomJSDriver。错误是:
[ERROR - 2016-02-12T16:02:47.717Z] WebElementLocator - _handleLocateCommand - 未找到元素:GAVE UP。搜索停止时间:1455292967683 org.openqa.selenium.NoSuchElementException:错误 消息=> '无法找到包含ID'电子邮件''
的元素
是否有关于如何在Java中执行此操作的明确指南,或者任何人都可以使用此工作登录?我很难找到关于这个主题的清晰度。
我假设错误与浏览器无头有关,因此会混淆路径,但我看到其他人使用类似的代码,它适用于他们。
WebDriver driver = new PhantomJSDriver();
try {
System.out.println("Logging in to Facebook...");
driver.get("https://www.facebook.com/login");
System.out.println(driver.getTitle());
driver.findElement(By.id("email")).sendKeys("USERNAME");
driver.findElement(By.id("pass")).sendKeys("PASS");
driver.findElement(By.id("loginbutton")).click();
}
catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:0)
这个问题有数百个类似问题,例如: this one。这是一个将或多或少地等同于应用于所有浏览器的问题,并且是导致测试不稳定的主要原因。
基本上,您要求驱动程序在请求页面后几乎立即(在几毫秒内)找到id="email"
,并且几乎可以肯定在它完成加载之前或在DOM中创建了Web元素。 / p>
解决方法是在尝试向其发送密钥之前等待元素准备就绪。 See these examples。 E.g。
System.out.println(driver.getTitle());
WebDriverWait wait = new WebDriverWait(driver, 10); // 10 secs max wait
wait.until(ExpectedConditions.presenceOfElementLocated( By.id("email") ));
driver.findElement(By.id("email")).sendKeys("USERNAME");
一旦你知道加载了DOM,就不需要等待其他元素了。