- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在使用 protractorJS 进行的一些实验中,我注意到没有简单的方法可以从 Protractor 扩展(继承)ElementFinder 对象以添加自己的函数。
例如,我想创建对象 Checkbox,它会有额外的方法 - check() - 应该根据 isSelected() 的结果切换复选框。
我想出了代码-
var ElementFinder = require('protractor/lib/element.js').ElementFinder;
var ElementArrayFinder = require('protractor/lib/element.js').ElementArrayFinder;
class CheckBox extends ElementFinder {
constructor(loc) {
var getWebElements = function () {
var ptor = browser;
var locator = loc;
return ptor.waitForAngular().then(function() {
if (locator.findElementsOverride) {
return locator.findElementsOverride(ptor.driver, null, ptor.rootEl);
} else {
return ptor.driver.findElements(locator);
}
});
}
var ArrayFinderFull = new ElementArrayFinder(browser, getWebElements, loc);
super(browser, ArrayFinderFull);
}
check() {
return this.isSelected().then(selected => selected? this.click() : null)
}
}
但是 getWebElements 是从 protractor/element.js 复制粘贴的 - https://github.com/angular/protractor/blob/3.1.0/lib/element.js#L131
这种复制粘贴让我很沮丧。我认为应该有更合适的方法来扩展 ElementFinder。
有没有人继承了protractorJS中的ElementFinder?
最佳答案
我不确定这是否有帮助,但这是 something we did recently在 ElementArrayFinder
上使用 takewhile()
方法。我们将以下内容放入 onPrepare()
:
protractor.ElementArrayFinder.prototype.takewhile = function(whileFn) {
var self = this;
var getWebElements = function() {
return self.getWebElements().then(function(parentWebElements) {
var list = [];
parentWebElements.forEach(function(parentWebElement, index) {
var elementFinder =
protractor.ElementFinder.fromWebElement_(self.ptor_, parentWebElement, self.locator_);
list.push(whileFn(elementFinder, index));
});
return protractor.promise.all(list).then(function(resolvedList) {
var filteredElementList = [];
for (var index = 0; index < resolvedList.length; index++) {
if (!resolvedList[index]) {
break;
}
filteredElementList.push(parentWebElements[index])
}
return filteredElementList;
});
});
};
return new protractor.ElementArrayFinder(this.ptor_, getWebElements, this.locator_);
};
现在我们可以对 element.all()
的结果使用 takewhile
:
element.all(by.repeater("row in rows")).takewhile(function (elm) {
return elm.getText().then(function (text) {
return some_condition_to_be_true;
});
});
关于javascript - 如何在 ProtractorJS 中扩展 ElementFinder 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35709805/
如果我定义一个页面对象myPage: return { myButton: element(by.css('#my-button')) }; 然后在别处执行 isElementPresent 检查
在 Protractor 中,是否有一种方法可以确定 ElementFinder 是否可以通过与所使用的定位器不同的定位器找到?我无法从定位器构造第二个 ElementFinder 并使用 .equa
我们的团队正在讨论是否应该禁止在页面对象中公开“ElementFinder”和“ElementArrayFinder”。 主要原因是西蒙·斯图尔特 (Simon Stewart) 的引用。 Page
我正在寻找一种从测试中扩展 Protractor 的 ElementFinder 类的方法。有没有办法访问 Protractor 的 ElementFinder 类/构造函数,以便我能够从测试中动态扩
element.all() 返回一个网络元素数组。我希望能够进一步处理这些元素。例子是element.all(by.something()).each(函数(行){ var button = row.
看书学AngularJS,有一个简单 Protractor 测试的例子: it('Should redirect to #/posts/1/sample-title1', function (
是否有官方方法来确定我从函数接收的输入是 ElementFinder(单个 Web 元素)还是 ElementArrayFinder(一组网络元素)。 到目前为止我已经知道了。 if (_.isFun
这是 Take elements while a condition evaluates to true (extending ElementArrayFinder) 的后续问题特别是主题和@cvak
鉴于我有 elmFinder 变量: var elmFinder = element(by.css('.thing')); 如果我需要取回 webdriver.Locator,又名定位器策略怎么办?
在使用 protractorJS 进行的一些实验中,我注意到没有简单的方法可以从 Protractor 扩展(继承)ElementFinder 对象以添加自己的函数。 例如,我想创建对象 Checkb
我有一个元素:this.page.taskAssignment,类型为 ElementFinder。在我的 UI 测试中,我单击此元素,但没有任何反应。我怀疑我点击了错误的元素,这就是为什么我想检查点
确定 var 是否为 elementFinder 对象的方法是什么?我现在的做法是检查“.getText()”是否是对象的一部分。但我想看看是否有更好的方法。 if (!el.getText) {
我想创建一个通知错误的通用函数 我似乎找不到从 ElementFinder 成员获取 css 选择器的方法 这是我的功能: static waitForElementToExist(elementFi
在我的测试用例中,我尝试实现助手,以在返回某些项目之前检查元素数组。如果数组不包含元素 - 我需要等待(我在应用程序性能方面遇到一些麻烦,有时列表中的元素加载太长并且同步不起作用)。 我的助手中的功能
尝试从 typescript 中的 Protractor extend ElementFinder 时收到编译警告。 package.json "typescript": "^2.0.0-dev.20
我正在尝试使用 Protractor 运行测试来计算表中的行数。我正在测试的页面有 5 个已加载的表,这些表没有 Id 参数,但它们在各自的表标题行中确实有不同的名称。因此,我提取所有表格元素,然后使
不幸的是,我们必须在当前项目中使用需要 jQuery 的旧库。这些的激活发生在生命周期钩子(Hook)部分“ngAfterViewChecked”中。由于事实上,TypeScript 无法在正确的时间
我是一名优秀的程序员,十分优秀!