如何使用 XPath 或 CSS 选择器在 Nightwatch 测试中查找子字符串
How to use an XPath or CSS selector to look for a substring in Nightwatch testing
我必须对以下元素进行 Nightwatch 测试:
<textarea id="xxxxxxxx-971-condition"
type="text" placeholder="Enter condition"
required="required" aria-required="true" class="form-control">
这基本上很简单,只是我发现“-971-”或多或少是一个随机的 3 位数字,因为文本区域
可以在页面上多次出现。我不能简单地寻找“starts-with('xxxxxxxx-')”,因为还有很多其他的
共享该前缀的表单字段。出于同样的原因,我不能或多或少地使用“ends-with('-condition')”。我需要结合
他们俩。但是怎么办?这是我尝试过的,首先从简单的案例开始:
browser
.useXpath() // every selector now must be xpath
.assert.visible("//textarea[ends-with(@id,'-condition')]") FAILS!
.assert.visible("//textarea[@id[ends-with(text(),'-condition')]]") FAILS!
.assert.visible("//textarea[@id=[ends-with(text(),'-condition')]]") FAILS!
.assert.visible("//textarea[contains(@id, starts-with(text(),'xxxxxxxx-') and ends-with(text(),'-condition'))]") FAILS!
.assert.visible("//textarea[contains(@id, starts-with(text(),'xxxxxxxx-'))]") FAILS!
.assert.visible("//textarea[contains(@id, ends-with(text(),'-condition'))]") FAILS!
.assert.visible("//id[contains(., ends-with(text(),'-condition'))]") FAILS!
.assert.visible("//textarea[@id[contains(., ends-with(text(),'-condition'))]]") FAILS!
.assert.visible("//textarea[@id[contains(., starts-with(text(),'xxxxxxxx-'))]]") FAILS!
.useCss() // we're back to CSS now
.assert.visible("textarea[id^='xxxxxxxx-']") <==== THIS WORKS!!!!
.assert.visible("textarea[id$='-condition']") <==== THIS WORKS!!!!
.assert.visible("textarea[id^='xxxxxxxx-' and id$='-condition']") <==== together this does NOT work
由于测试运行了很长时间才到达此部分,所以我有很多时间 google。你也会
请注意,我使用 CSS 选择器的运气要好得多(但无法将它们组合到我需要的效果)。
有人有什么建议吗?
此 textarea[id^='xxxxxxxx-' and id$='-condition']
不起作用的原因是因为您暗示该元素包含 2 个不同的 ID 属性。
我相信这应该有效:
textarea[id^='xxxxxxxx-'][id$='-condition']
我必须对以下元素进行 Nightwatch 测试:
<textarea id="xxxxxxxx-971-condition"
type="text" placeholder="Enter condition"
required="required" aria-required="true" class="form-control">
这基本上很简单,只是我发现“-971-”或多或少是一个随机的 3 位数字,因为文本区域 可以在页面上多次出现。我不能简单地寻找“starts-with('xxxxxxxx-')”,因为还有很多其他的 共享该前缀的表单字段。出于同样的原因,我不能或多或少地使用“ends-with('-condition')”。我需要结合 他们俩。但是怎么办?这是我尝试过的,首先从简单的案例开始:
browser
.useXpath() // every selector now must be xpath
.assert.visible("//textarea[ends-with(@id,'-condition')]") FAILS!
.assert.visible("//textarea[@id[ends-with(text(),'-condition')]]") FAILS!
.assert.visible("//textarea[@id=[ends-with(text(),'-condition')]]") FAILS!
.assert.visible("//textarea[contains(@id, starts-with(text(),'xxxxxxxx-') and ends-with(text(),'-condition'))]") FAILS!
.assert.visible("//textarea[contains(@id, starts-with(text(),'xxxxxxxx-'))]") FAILS!
.assert.visible("//textarea[contains(@id, ends-with(text(),'-condition'))]") FAILS!
.assert.visible("//id[contains(., ends-with(text(),'-condition'))]") FAILS!
.assert.visible("//textarea[@id[contains(., ends-with(text(),'-condition'))]]") FAILS!
.assert.visible("//textarea[@id[contains(., starts-with(text(),'xxxxxxxx-'))]]") FAILS!
.useCss() // we're back to CSS now
.assert.visible("textarea[id^='xxxxxxxx-']") <==== THIS WORKS!!!!
.assert.visible("textarea[id$='-condition']") <==== THIS WORKS!!!!
.assert.visible("textarea[id^='xxxxxxxx-' and id$='-condition']") <==== together this does NOT work
由于测试运行了很长时间才到达此部分,所以我有很多时间 google。你也会 请注意,我使用 CSS 选择器的运气要好得多(但无法将它们组合到我需要的效果)。
有人有什么建议吗?
此 textarea[id^='xxxxxxxx-' and id$='-condition']
不起作用的原因是因为您暗示该元素包含 2 个不同的 ID 属性。
我相信这应该有效:
textarea[id^='xxxxxxxx-'][id$='-condition']