Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nightwatch无法通过css id或类选择器定位元素_Javascript_Css Selectors_Nightwatch.js - Fatal编程技术网

Javascript Nightwatch无法通过css id或类选择器定位元素

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,所以看起来应该可以工作。但

我们正在使用Nightwatch自动化一些UI测试。当前的一些测试相当脆弱,主要与奇怪的CSS选择器有关,我正试图简化它们。但是,我希望使用的一些简单的CSS选择器是,嗯,不是

我试图找到这个嵌套得很深的标记:

但这是一个讨厌的CSS选择器,我想用以下内容替换它:

.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);