Dry*_*ams 1 javascript nightwatch.js vue.js e2e-testing
在我的 Nightwatch 测试中,我有一个 before 每个运行并从 Facebook 中删除一个应用程序。如果应用程序不存在,我只想停止之前的测试。
.waitForElementPresent('#root div.touchable a', 2000, false, function (result) {
if (result.value === false) {
browser.saveScreenshot('./test/e2e/img/element-not-there.png')
browser.end()
}
})
.doSomethingIfElementIsThere() // not real ;)
Run Code Online (Sandbox Code Playgroud)
即使设置了false参数,这似乎也不起作用。我收到此错误:
ERROR: Unable to locate element: "#root div.touchable a" using: css selector
at Object.before (/Users/user/projects/project/test/e2e/specs/testy-mc-test-face.js:30:8)
? Timed out while waiting for element <#root div.touchable a> to be present for 2500 milliseconds. - expected "found" but got: "not found"
at Object.before (/Users/user/projects/project/test/e2e/specs/testy-mc-test-face.js:30:8)
Run Code Online (Sandbox Code Playgroud)
只是想知道如何检查某些东西而不是错误。或者如果元素存在,则继续断言?
谢谢水桶
我检查了elementPresent断言的代码:
this.command = function(callback) {
return this.api.elements(this.client.locateStrategy, selector, callback);
};
this.value = function(result) {
return (result.status !== 0 || result.value.length === 0) ? 'not present' : 'present';
};
Run Code Online (Sandbox Code Playgroud)
它使用一个低级 api,您可以使用它来测试元素是否存在:
.elements()
从文档根开始搜索页面上的多个元素。定位的元素将作为 WebElement JSON 对象返回。要传递的第一个参数是定位器策略,在 WebDriver 文档中有详细说明。
我想解决方案可以是这样的:
browser.elements('css selector', '#root div.touchable a', result => {
const isPresent = result.status === 0 && result.value.length > 0;
// doStuff
});
Run Code Online (Sandbox Code Playgroud)