Aar*_*ehn 19 selenium automated-tests nightwatch.js
在我正在测试的页面中,可能会显示两个按钮:BASIC或ADVANCED.
我希望能够判断ADVANCED按钮是否显示 - 如果是,请单击它.
如果显示BASIC按钮,我想什么都不做,继续我的测试.
我试验过的所有Nightwatchjs选项都会生成失败消息.例如,如果我"waitforpresent"或"waitforvisible"并且该按钮不存在,则会生成错误/失败.我只是想知道哪个按钮存在,所以我可以在我的代码中做出决定.
这是我尝试过的:
try {
browser.isVisible('#advanced-search', function(result) {console.log(result.state); })
} catch (myError)
{
console.log(myError);
}
Run Code Online (Sandbox Code Playgroud)
思考?
小智 15
您可以通过使用Selenium协议"element"和回调函数来检查结果状态以确定是否找到该元素.例如:
browser.element('css selector', '#advanced-search', function(result){
if(result.status != -1){
//Element exists, do something
} else{
//Element does not exist, do something else
}
});
Run Code Online (Sandbox Code Playgroud)
使用isVisible,您似乎走在正确的轨道上。从守夜文档中,我们看到在回调中,您可以检查result.value属性以查看元素是否可见,即:
browser.isVisible('#advanced-search', results => {
if (results.value) { /* is visible */ }
else { /* is not visible */ }
});
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用Saifur建议的方法。调用selenium api的.elements命令,然后检查结果数组的长度:
browser.elements('css selector', '#advanced-search', results => {
if (results.value.length > 0) { /* element exists */ }
else { /* element does not exist */ }
});
Run Code Online (Sandbox Code Playgroud)
实际上,这可以包装到自定义命令中:
// isPresent.js
module.exports.command = function (selector, callback) {
return this.elements('css selector', selector, results => {
if (results.status !== 0) { // some error occurred, handle accordingly
}
callback(results.value.length > 0);
});
};
Run Code Online (Sandbox Code Playgroud)
那么在普通代码中,您可以这样称呼它:
browser.isPresent('#advanced-search', advancedSearchPresent => {
// make decisions here
}
Run Code Online (Sandbox Code Playgroud)
如果您要在回调中进行其他api调用,将它们全部包装在.perform调用中可能是明智的:
browser.perform((_, done) => {
browser.isPresent('#advanced-search', advancedSearchPresent => {
// ...do more stuff...
done();
});
});
Run Code Online (Sandbox Code Playgroud)
语法可能有点偏差。对 NightWatchJS 不太熟悉。然而,概念仍然相同。
//I would not wait for a element that should not exist
//rather I would find the list of the element and see if the count is greater than 0
//and if so, we know the element exists
browser.findElements(webdriver.By.css('#advanced-search')).then(function(elements){
if(elements.length> 0){
console.log(elements.length);
}
});
Run Code Online (Sandbox Code Playgroud)
在这里查看更多示例
| 归档时间: |
|
| 查看次数: |
17648 次 |
| 最近记录: |