jmr*_*cha 2 selenium node.js selenium-webdriver
我是 Selenium 的新手,我想我只是不明白代码和浏览器中发生了什么。我可以通过用 a 替换 driver.wait 代码(在下面发布)来解决我的问题,driver.sleep(1000)但我一直在读到 sleep 语句并不理想。
有人可以帮我弄清楚为什么我的代码不起作用以及到底发生了什么?如果有帮助,我可以提供完整的堆栈跟踪。
下面是代码的样子。
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)
Run Code Online (Sandbox Code Playgroud)
更新:
根据建议,我尝试elementIsVisible通过以下代码使用该函数等待元素变为可见。
driver.wait(until.elementIsVisible(driver.findElement(By.id('Passwd')), 5000))
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误。
NoSuchElementError:没有这样的元素:无法定位元素:{"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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3091 次 |
| 最近记录: |