Javascript Nightwatch无法通过css id或类选择器定位元素
我们正在使用Nightwatch自动化一些UI测试。当前的一些测试相当脆弱,主要与奇怪的CSS选择器有关,我正试图简化它们。但是,我希望使用的一些简单的CSS选择器是,嗯,不是 我试图找到这个嵌套得很深的标记: 但这是一个讨厌的CSS选择器,我想用以下内容替换它:Javascript Nightwatch无法通过css id或类选择器定位元素,javascript,css-selectors,nightwatch.js,Javascript,Css Selectors,Nightwatch.js,我们正在使用Nightwatch自动化一些UI测试。当前的一些测试相当脆弱,主要与奇怪的CSS选择器有关,我正试图简化它们。但是,我希望使用的一些简单的CSS选择器是,嗯,不是 我试图找到这个嵌套得很深的标记: 但这是一个讨厌的CSS选择器,我想用以下内容替换它: .waitForElementVisible('#btnEndSession', 1000) .click('#btnEndSession') 因为我感兴趣的元素实际上具有btnEndSession的id,所以看起来应该可以工作。但
.waitForElementVisible('#btnEndSession', 1000)
.click('#btnEndSession')
因为我感兴趣的元素实际上具有btnEndSession的id,所以看起来应该可以工作。但事实并非如此:在等待元素显示10000毫秒的消息时,nightwatch的一个错误超时
我也试过:
.waitForElementVisible('.btn-crm', 10000)
.waitForElementVisible('a[id=btnEndSession]', 10000)
.waitForElementVisible('a#btnEndSession', 10000)
但这些也不起作用。你知道为什么这些更简单的选择器没有拾取元素吗
编辑:
好吧,奇怪的是,这起作用了:
.waitForElementVisible('a.btn-crm', 1000)
但是,在相同的测试中,查找此元素:
<select class="custom-form-control crm-result-visit select-hidden" id="crm-result-visit" name="crmResultVisit">
<option value=" ">Select</option>
<option value="Not Home">Not Home</option>
</select>
我有点不情愿地得出这样的结论:夜视中的CSS选择器支持是相当有缺陷的
FWIW,我们正在使用0.6.7版的nightwatch。我刚刚开始使用nightwatch JS,我正在使用nightwatch v0.6.7。下面的代码对我来说很好
module.exports = {
'1. test' : function (browser) {
browser
.url('<your url>')
.waitForElementVisible('select[id=crm-result-visit]',1000)
.click('select[id=crm-result-visit]');
}
};
值得一提的是,我们最终放弃了夜视,直接去了Selenium C,在我们的例子中,它似乎没有这些问题,并且更好地融入了我们环境的其他部分。这不是一个很好的答案,但我不再有这个问题了:-.尝试在操作之前显式设置CSS选择器:
browser.useCss();
browser.waitForElementVisible('.btn-crm', 10000);
abtnEndSession有效吗?从未使用过Nightwatch.js,但我倾向于认为它也有问题。问得好。不幸的是,在我上面的两个测试用例中,这种语法也失败了。让我如此感兴趣的是错误消息的性质-它表明CSS选择器解析器正在解析选择器,这是它对选择器/元素所做的事情,它关闭了。无论如何,我们最终放弃了守夜:像这样的问题太多了,没有解决方案。我们开始通过Selenium的C绑定直接使用Selenium,效果更好。我只是想插嘴一下——从0.6.x开始,Nightwatch已经取得了长足的进步,我可以通过上述方式使用id或类选择器。如果查看TA,很值得一看:您是否直接从c调用Java api?我们使用的是c版本的Selenium,可直接从以下页面下载:。不确定它在幕后是如何实现的,但我不认为这只是C绑定调用Java:我得到的印象是它是本机C实现。效果很好。
.waitForElementVisible('select.crm-result-visit', 10000)
.waitForElementVisible('select#crm-result-visit', 10000)
.waitForElementVisible('#crm-result-visit', 10000)
.waitForElementVisible('.crm-result-visit', 10000)
.waitForElementVisible('select[id=crm-result-visit]', 10000)
module.exports = {
'1. test' : function (browser) {
browser
.url('<your url>')
.waitForElementVisible('select[id=crm-result-visit]',1000)
.click('select[id=crm-result-visit]');
}
};
browser.useCss();
browser.waitForElementVisible('.btn-crm', 10000);