我正在使用 Protractor 进行自动化测试,此时所有测试都可以正常工作。 但是如果我将测试设置为并行运行
添加到配置文件:
shardTestFiles: true,
maxInstances: 4,
测试将开始随机失败,抛出“未找到元素”和/或“预期失败”异常。
有人可以建议导致此问题的原因或解决方法吗?
可能是在开始运行新的浏览器实例并且 Protractor 关注它时测试失败的原因吗? (此时我有大约 20 个规范文件,每个运行的规范文件都会启动新的浏览器实例)
环境:
Windows 7 x64
Protractor v2.1.0
Browser Chrome v46
最佳答案
为了解决我的问题,我创建了一个 elementFinder 和 ElementArrayFinder 对象的包装器,其中包含覆盖的方法和一些额外的等待可见性和/或存在性。
elementFinder.getText() 和 elementFinder.click() 示例
function ElementFinderWrapper() {
var conditions = protractor.ExpectedConditions;
/**
* Returns a wrapper for ElementFinder element.
* @param {webdriver.Locator} locator
*/
this.get = function(locator){
return new Control(element(locator));
};
/**
* Creates a wrapper for ElementFinder element.
* @param {ElementFinder} element_finder
* @constructor
*/
function Control(element_finder) {
/**
* Returns the visible innerText of this element.
* @returns {!webdriver.promise.Promise.<string>}
*/
this.getText = function () {
return browser.wait(conditions.presenceOf(element_finder), 3000);
.then(function () {
return browser.wait(conditions.visibilityOf(element_finder), 3000);
})
.then(function () {
return element_finder.getText();
});
};
/**
* Clicks on visible element.
* @returns {!webdriver.promise.Promise.<void>}
*/
this.click = function () {
return browser.wait(conditions.presenceOf(element_finder), 3000);
.then(function () {
return browser.wait(conditions.visibilityOf(element_finder), 3000);
})
.then(function () {
return element_finder.click();
});
};
};
};
然后使用类似的东西:
contol = ElementFinderWrapper.get(by.xpath('some path'));
control.getText();
control.click();
关于javascript - Protractor 并行运行导致测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33564090/