Nightwatch 无法通过 css id 或 class 选择器定位元素
Nightwatch can't locate element via css id or class selectors
我们正在使用 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,看起来应该可以。但事实并非如此:nightwatch 的其中一条 "Timed out while waiting for element <#btnEndSession> to be visible for 10000 milliseconds" 消息出现错误。
我也试过:
.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 nightwatch 中的选择器支持有很多问题。
FWIW,我们使用的是 nightwatch 版本 0.6.7。
我刚开始使用 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]');
}
};
为了它的价值,我们最终放弃了 Nightwatch,直接转向 Selenium(在我们的例子中是 C#),它似乎没有这些问题,并且可以更好地集成到我们环境的其余部分。不是一个很好的答案,但我不再有这个问题:-)。
尝试在您的操作之前明确设置 CSS 选择器:
browser.useCss();
browser.waitForElementVisible('.btn-crm', 10000);
我们正在使用 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,看起来应该可以。但事实并非如此:nightwatch 的其中一条 "Timed out while waiting for element <#btnEndSession> to be visible for 10000 milliseconds" 消息出现错误。
我也试过:
.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 nightwatch 中的选择器支持有很多问题。
FWIW,我们使用的是 nightwatch 版本 0.6.7。
我刚开始使用 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]');
}
};
为了它的价值,我们最终放弃了 Nightwatch,直接转向 Selenium(在我们的例子中是 C#),它似乎没有这些问题,并且可以更好地集成到我们环境的其余部分。不是一个很好的答案,但我不再有这个问题:-)。
尝试在您的操作之前明确设置 CSS 选择器:
browser.useCss();
browser.waitForElementVisible('.btn-crm', 10000);