我正在寻找一种方法来继承webdriverio返回的WebElement对象,没有猴子修补和TS类型支持(自动完成是必须的).有没有办法做这样的事情?
class Checkbox extends WebdriverIOWebElement {
constructor() {
super($('div'))
}
// overriding base method
isDisplayed(): boolean {
// blabla some new logic here
}
check() {
if(!this.isChecked()) {
this.click()
}
}
uncheck() {
if(this.isChecked()) {
this.click()
}
}
}
Run Code Online (Sandbox Code Playgroud) javascript webdriver selenium-webdriver typescript webdriver-io
当隐式等待小于显式时会发生误解:
var timeOut = 5000;
var search = element(by.xpath(`//*[@name='qwer']`));
browser.manage().timeouts().implicitlyWait(4000);
browser.ignoreSynchronization = true;
describe('Protractor Test', function () {
beforeEach(function () {
browser.get('https://www.google.com.ua');
});
it('EC', function () {
console.log('START');
// browser.sleep(timeOut);
browser.wait(protractor.ExpectedConditions.presenceOf(search), timeOut);
});
});
Run Code Online (Sandbox Code Playgroud)
总时间:8.613秒.隐式设置等待第二个低位:3000,结果为6.865秒.它是如何在引擎盖下工作的?非常感谢提前!
在使用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)
}
}
Run Code Online (Sandbox Code Playgroud)
但是getWebElements是从protractor / element.js复制粘贴-https: //github.com/angular/protractor/blob/3.1.0/lib/element.js#L131
这种复制粘贴使我沮丧。我认为应该有更适当的方法来扩展ElementFinder。
有人在protractorJS中继承了ElementFinder吗?
javascript ×3
protractor ×2
webdriver ×2
angularjs ×1
selenium ×1
typescript ×1
wait ×1
webdriver-io ×1