有人知道如何在WebDriverJS中点击WebElement吗? 我已经知道如何等待元素"可见",但我需要它可以点击" ...类似于Python绑定中的expectable conditions。 我还没能在Webdriver Js API中找到类似的东西。
答案 0 :(得分:8)
似乎没有相当于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();
由于我们正在使用promises,代码可能看起来有点奇怪。并非承诺本质上奇怪,但是当他们习惯使用Python时,他们需要一些时间习惯。
答案 1 :(得分:1)
UNTIL似乎是webdriver js中最接近的东西:
检查: https://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/lib/until.html
那里已经定义了等待条件。 我不知道哪一个应该被认为是可以解决的。
答案 2 :(得分:1)
如果您不关心点击该对象 **,那么您可以执行以下操作:
function clickWhenClickable(locator, timeout){
driver.wait(function(){
return driver.findElement(locator).then(function(element){
return element.click().then(function(){
return true;
}, function(err){
return false;
})
}, function(err){
return false;
});
}, timeout, 'Timeout waiting for ' + locator.value); ;
}
**如果只是想检查该元素是否可点击而不必点击,那么此代码段不适合您。在那种情况下,我会说webdriver js没有提供这样做的手段。 (或者至少我还没有找到,欢迎见解:))