WebdriverJS ElementNotVisibleError:元素不可见



我是Selenium的新手,我想我只是不理解代码和浏览器中发生的事情。我可以通过更换司机来解决我的问题。等待代码(张贴在下面)与driver.sleep(1000),但我一直在阅读睡眠声明不理想。

谁能帮我弄清楚为什么我的代码不工作,到底是怎么回事?如果有帮助的话,我可以提供一个完整的堆栈跟踪。

代码如下:

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: cannot locate element: {"method":"css selector","selector":"*[id="Passwd"]"}

driver.wait (until.elementIsVisible (driver.findElement (By.id("Passwd")),5000))

实际上这个语句是不正确的等待,直到元素是可见的,在这个语句中,driver.findElement(By.id('Passwd'))将抛出NoSuchElementError,如果在那个时候元素不存在于DOM,你得到。

你应该先使用until.elementLocated(locator)等待所需元素出现在DOM上,然后使用until.elementIsVisible(element)等待元素可见:-

const until = webdriver.until;
var pwd = driver.wait(until.elementLocated(By.id('Passwd')), 5000);
driver.wait(until.elementIsVisible(pwd), 5000)).sendKeys(password)

最新更新