ale*_*cxe 11 javascript testing selenium selenium-webdriver protractor
当条件评估为true(扩展ElementArrayFinder)主题和@ cvakiitho的答案时,这是Take元素的后续问题.
问题:
执行以下代码后:
var i = 0;
var el = element.all(by.css('ul li a'));
var tableItems = [];
(function loop() {
el.get(i).getText().then(function(text){
if(text){
tableItems.push(el.get(i));
i+=1;
loop();
}
});
}());
Run Code Online (Sandbox Code Playgroud)
tableItems将包含一个ElementFinder实例数组- 或者,简单地说 - 一个web元素数组.
问题:
是否可以将ElementFinders 数组转换为ElementArrayFinder实例?
动机:
我想这样做的原因是让所有的方便ElementArrayFinder功能的实用程序,如map(),each(),reduce()并可以调用getText()它生产这将分解为元素的文本数组的承诺.
Mic*_*nov 10
构造函数ElementArrayFinder基本上需要两个主要参数:量角器实例和一个函数getWebElements,它应该返回一个解析为Web元素数组的promise.只要每个人ElementFinder都有一个方法来调用它的Web元素getWebElement,就可以创建这样一个函数.
var arrayOfElementFinders = [el1, el2, el3];
var getWebElements = function () {
// create array of WebElements from array of ElementFinders
var webElements = arrayOfElementFinders.map(function (ef) {
return ef.getWebElement();
});
// immediately resolve and return promise
return protractor.promise.fulfilled(webElements);
};
Run Code Online (Sandbox Code Playgroud)
现在,当满足所有要求时,可以创建一个新实例ElementArrayFinder:
var elArrayFinder = new protractor.ElementArrayFinder(protractor, getWebElements);
Run Code Online (Sandbox Code Playgroud)
为了方便使用,我将向ElementArrayFinder构造函数添加一个静态方法,并在测试开始之前将其包含在某处:
protractor.ElementArrayFinder.fromArray = function (arrayOfElementFinders) {
var getWebElements = function () {
var webElements = arrayOfElementFinders.map(function (ef) {
return ef.getWebElement();
})
return protractor.promise.fulfilled(webElements);
};
return new protractor.ElementArrayFinder(protractor, getWebElements);
};
Run Code Online (Sandbox Code Playgroud)
并在以下测试中使用它:
var elArrayFinder = protractor.ElementArrayFinder.fromArray(arrayOfElementFinders);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1800 次 |
| 最近记录: |