我是新來的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