Chr*_*dam 9 javascript selenium ui-automation selenium-webdriver
有人知道如何在WebDriverJS中等待WebElement可点击吗?我已经知道如何等待元素"可见",但我需要它是"可点击的"..类似于Python绑定中可预期的条件.我无法在Webdriver Js API中找到类似的东西.
似乎没有相当于Python的条件selenium.webdriver.support.expected_conditions.element_to_be_clickable.但是,查看该条件的来源,我发现它会进行两项检查:
元素是可见的.
它已启用.
所以你可以等待这两个条件成为现实.以下代码说明了如何完成.它首先使元素不可见并禁用它,设置一些超时以使其可见并启用它,然后等待这两个条件发生.
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
driver.get('http://www.google.com');
// This script allows testing the wait. We make the element invisible
// and disable it and then set timeouts to make it visible and enabled.
driver.executeScript("\
var q = document.getElementsByName('q')[0];\
q.style.display = 'none';\
q.disabled = true;\
setTimeout(function () {\
q.style.display = '';\
}, 2000);\
setTimeout(function () {\
q.disabled = false;\
}, 3000);\
");
driver.findElement(webdriver.By.name('q')).then(function (element) {
driver.wait(function () {
return element.isDisplayed().then(function (displayed) {
if (!displayed)
return false;
return element.isEnabled();
});
});
element.sendKeys('webdriver');
});
driver.findElement(webdriver.By.name('btnG')).click();
driver.wait(function() {
return driver.getTitle().then(function(title) {
return title === 'webdriver - Google Search';
});
}, 1000);
driver.quit();
Run Code Online (Sandbox Code Playgroud)
由于我们正在使用promises,因此代码可能看起来有点奇怪.并非承诺本质上是奇怪的,但是当他们习惯使用Python时,他们需要一些时间习惯.