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

时间:2015-05-05 17:18:03

标签: javascript css-selectors nightwatch.js

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

我正在尝试找到这个深层嵌套的<a>标记:

<a class="btn btn-quote btn-crm" href="/crm/" id="btnEndSession" style="display: inline-block;">End Session</a>

以下是一些有效的代码:

.waitForElementVisible('#quoteSummary > div > div > div > div > a:nth-child(2)', 1000)
.click('#quoteSummary > div > div > div > div > a:nth-child(2)')

但那是一个讨厌的CSS选择器,我想用它代替它:

.waitForElementVisible('#btnEndSession', 1000)
.click('#btnEndSession')

由于我感兴趣的<a>元素实际上具有btnEndSession的id,所以它似乎应该有效。但事实并非如此:夜间观察错误,其中一个“在等待元素&lt;#btnEndSession&gt;在10000毫秒内可见”消息时超时。

我也试过了:

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

所有这些不同的选择器都找不到元素:

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

我有点不情愿地得出结论,夜班中的CSS选择器支持非常错误。

FWIW,我们使用的是0.6.7版的夜视仪。

4 个答案:

答案 0 :(得分:4)

为了它的价值,我们最终放弃了Nightwatch,直接进入Selenium(在我们的例子中是C#),这似乎没有这些问题,并且更好地融入我们的其他环境。不是很好的答案,但我不再有这个问题: - )。

答案 1 :(得分:1)

我刚开始使用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]');
  }
};

答案 2 :(得分:1)

尝试在您的操作之前显式设置 CSS 选择器:

browser.useCss();

browser.waitForElementVisible('.btn-crm', 10000);

答案 3 :(得分:-1)

不确定是否有帮助,但我今天偶然发现了这个问题,并在一段时间后开始工作。

默认情况下,nightwatch使用css选择器,只需添加&#34; .useXpath()&#34;解决了我的问题。因此,请先检查您使用的选择器,然后使用所需的选择器。

来源:https://github.com/nightwatchjs/nightwatch-docs/blob/master/guide/using-nightwatch/using-xpath-selectors.md