我正在使用selenium javascript webdriver,我想制作一个通用的'getVisibleElement'函数。我在webdriver源代码中看到了这个版本:
var link = driver.findElement(firstVisibleLink);
function firstVisibleLink(driver) {
var links = driver.findElements(By.tagName('a'));
return webdriver.promise.filter(links, function(link) {
return links.isDisplayed();
}).then(function(visibleLinks) {
return visibleLinks[0];
});
}
有没有一种方法可以概括这一点,以便我可以传入任何css选择器作为参数,并获得它的第一个可见版本?我一直遇到'无效定位器'的问题,'未定义不是函数'错误的方式我一直在尝试。
页:
var webdriverUtils = require('../../utils/extendWebdriver_utils');
function contactCardPage(){
var elements = Object.create({}, {
viewToggle: { get: function(){
return webdriverUtils.getFirstVisibleElement('[name="viewToggle"]');
}
}
this.toggleView = function(){
return elements.viewToggle.click();
}
});
module.exports = new contactCardPage();
WebdriverUtils:
function webdriverUtils(){
this.getFirstVisibleElement = function(selectorString){
var elements = session.driver.findElements(webdriver.By.css(selectorString));
return webdriver.promise.filter(elements, function(el) {
return el.isDisplayed();
}).then(function(visibleElement) {
return visibleElement[0];
});
}
});
module.exports = new webdriverUtils();
规格:
var expect = require('chai').expect;
var contactCardPage = require('../../pageObjects/contactCardPage.js');
describe('Contacts', function () {
it('Can be expanded', function(done){
contactCardPage.toggleView().then(function(){
//Expect here for making sure expanded elements are now displayed
done();
});
});
});
目前这给我一个'无效定位器'错误。
有没有办法传入选择器并以这种方式获取可见元素?