我当前正在使用HtmlUnitDriver,虽然我可以设置用户名,但我不断收到一个错误消息,即Selenium找不到密码字段。我正在使用JavascriptExecutor在PayPal沙箱表单中设置这些值,但是我仍然无法通过密码步骤。
HtmlUnitDriver driver = new HtmlUnitDriver(BrowserVersion.CHROME)
JavascriptExecutor executor = (JavascriptExecutor)driver
driver.setJavascriptEnabled(true)
driver.get(url)
log.debug "setting username"
Thread.sleep(5000)
if(driver.findElement(By.xpath("//*[@id='email']")).displayed){
executor.executeScript("document.getElementById('email').value = 'email';")
log.debug "Username was set"
} else {
log.debug "We never set the username!"
}
if(driver.findElement(By.xpath("//*[@id='password']")).displayed){
executor.executeScript("document.getElementById('password').value='password';")
} else {
log.debug "We never set the password."
}
我知道我要在那里睡觉,这对于Selenium测试来说是不好的做法,但是我的智慧到此为止。在这种情况下,URL是表达结帐的链接,就像这样:https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=#################
任何帮助将不胜感激!
答案 0 :(得分:0)
正如我之前提到的,这里存在多个问题:
如您所见,“密码”按钮实际上是不可见的。因此,除非我们单击下一步按钮,否则该脚本将无法运行。
因此,必须添加以下内容才能实现任何进展:
driver.findElement(By.id("btnNext")).submit()
但是很遗憾,我无法使用HtmlUnitDriver正确单击此按钮。似乎单击了按钮,但是什么也没有发生,因此密码字段保持隐藏。但是,一旦我切换到ChromeDriver,就不再是问题,并且可以使用相同的代码。因此,我想您已经达到了HtmlUnitDriver限制之一,需要使用Chrome或Gecko驱动程序。
最后,对代码进行一些调整将使其更可靠,更快。这是适用于“真实”浏览器(Chrome或Gecko)的最终版本:
WebDriver driver = new ChromeDriver()
WebDriverWait wait = new WebDriverWait(driver, 10)
driver.get(url)
// The following line waits for email field to appear. It's more economical and reliable than Thread.sleep
WebElement email = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("email")))
log.debug "setting username"
email.sendKeys("email@gmail.com")
log.debug "Username was set " + email.getAttribute("value")
driver.findElement(By.id("btnNext")).submit()
// Here again using the same method to verify when password becomes visible
WebElement password = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("password")))
log.debug "setting password"
password.sendKeys("password")
log.debug "Password was set " + password.getAttribute("value")
(注意:我用Java编写了这段代码,所以希望我能正确翻译所有内容,但是如果我不愿意修复它的话)
使用HtmlUnitDriver,脚本将显示错误:
org.openqa.selenium.TimeoutException:预期条件失败:正在等待By.id所定位元素的可见性:电子邮件(以500 MILLISECONDS间隔尝试10秒)