我正在尝试编写一个登录到网站的节点功能,并且无法使其正常工作。我正在尝试使用this post中引用的isElementPresent
函数等待页面加载,但它似乎无法正常工作。
这是我到目前为止所拥有的:
const webdriver = require('selenium-webdriver')
const By = webdriver.By
var username = ''
var password = ''
var timeout = 5000
function FacebookLogin(username, password) {
var driver = new webdriver.Builder()
.withCapabilities(webdriver.Capabilities.chrome())
.build()
driver.get('http://www.facebook.com')
driver.wait(function() {
return driver.isElementPresent(By.id('email'))
}, timeout)
var user = driver.findElement(By.id('email'))
user.sendKeys(username)
var pass = driver.findElement(By.id('pass'))
pass.sendKeys(password)
pass.submit()
driver.sleep(5000)
driver.quit()
}
FacebookLogin(username, password)
当我运行该函数但收到错误TypeError: driver.isElementPresent is not a function
时。这里发生了什么,我错过了什么?
答案 0 :(得分:17)
如果您使用的是Selenium 3
,则应尝试使用findElements
来确定元素是否存在,如下所示: -
driver.findElements(By.id('email')).then(found => !!found.length);
或者如果你想等到欲望元素出现,你应该尝试使用webdriver.until
,如下所示: -
const until = webdriver.until;
var user = driver.wait(until.elementLocated(By.id('email')), timeout);
user.sendKeys(username);
答案 1 :(得分:1)
确保安装了所有依赖项,如Selenium和浏览器驱动程序,并使用一个非常小的示例。
然后你可以用console.log(util.inspect(driver))检查驱动程序对象上的函数;
如果设置了依赖项,则API可能会略有改变。此处https://www.npmjs.com/package/selenium-webdriver的当前示例使用until
。您可能希望先尝试更接近该示例的内容。