我是新来的Selenium,我想我只是不理解代码和浏览器中发生了什么。我可以通过用driver.sleep(1000)
替代driver.wait代码(发布如下)来解决我的问题,但我一直在阅读睡眠语句并不理想。WebdriverJS ElementNotVisibleError:元素不可见
有人能帮我弄清楚为什么我的代码不工作,到底发生了什么?如果有帮助,我可以提供完整的堆栈跟踪。
下面是代码的样子。
const webdriver = require('selenium-webdriver')
const chrome = require("selenium-webdriver/chrome");
const By = webdriver.By
const until = webdriver.until
var username = "XXX"
var password = "XXX"
function login(username, password) {
// This part works fine
driver.wait(until.elementLocated(By.id('Email')))
driver.findElement(By.id('Email')).sendKeys(username)
driver.findElement(By.id('next')).click()
// Here is where the element not visible happens
driver.wait(until.elementLocated(By.id('Passwd')), 5000)
// driver.sleep(1000) works but I'm not sure why?
driver.findElement(By.id('Passwd')).sendKeys(password)
// Login
driver.findElement(By.id('signIn')).click()
}
var driver = new webdriver.Builder()
.withCapabilities({'browserName': 'chrome'}).build()
driver.get('https://gmail.com')
login(username, password)
更新:
每建议,我尝试使用elementIsVisible
功能等待元素变得可见,通过下面的代码。
driver.wait(until.elementIsVisible(driver.findElement(By.id('Passwd')), 5000))
但我得到以下错误。
NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"*[id="Passwd"]"}
'.isEnabled()'通常只适用于'BUTTON'标签被禁用/启用。您可以尝试等待它可见或可点击。 – JeffC
哦...和另一条评论。你想让函数做一件事...在这种情况下,我会将'googeLogin()'改为'login()',并取出设置驱动程序的部分并导航到谷歌。让它只处理登录部分。 – JeffC
@JeffC我清理了一下代码。我删除了'isEnabled()'函数,但仍然看到'element not visible'错误。 – jmreicha