0

我想在量角器中断言链接文本是通过以下方式组成的:text-1(其中文本是一个变量,数字可以由任何数字组成)。

我尝试了以下方法:

browser.wait(
        ExpectedConditions.visibilityOf(
        element(by.xpath(`//a[@class = 'collapsed' and starts-with(text(), '${text}') and ends-with(text(), '-(/d+)')]`))),
 5000)

browser.wait(
        ExpectedConditions.visibilityOf(
        element(by.xpath(`//a[@class = 'collapsed' and starts-with(text(), '${text}') and ends-with(text(), '/^-(/d+)$/')]`))),
        5000)

不幸的是,上述 xpath 都不起作用。

我怎样才能解决这个问题?

4

2 回答 2

0

如果您更改声明变量和第二个谓词的方式,您可以使用:

//a[@class='collapsed'][starts-with(text(),'" + text_variable + "')][number(replace(.,'^.*-(\d+)$','$1'))*0=0]

where[number(replace(.,'^.*-(\d+)$','$1'))*0=0]测试字符串末尾是否存在数字。

例子。如果你有 :

<p>
<a class="collapsed">foofighters-200</a>
<a class="collapsed">foofighters</a>
<a class="collapsed">boofighters-200</a>
<a class="collapsed">boofighters-200abc</a>
</p>

以下 XPath :

//a[@class='collapsed'][starts-with(text(),'foo')][number(replace(.,'^.*-(\d+)$','$1'))*0=0]

将输出 1 个元素:

<a class="collapsed">foofighters-200</a>

所以在量角器中你可以有:

var text = "foo";
browser.wait(ExpectedConditions.visibilityOf(element(by.xpath("//a[@class='collapsed'][starts-with(text(),'" + text + "')][number(replace(.,'^.*-(\d+)$','$1'))*0=0]"))), 5000);
...
于 2020-06-23T15:46:55.383 回答
0

您可以为此使用正则表达式:

await browser.wait(async () => {
    return new RegExp('^.*(\d+)').test(await $('a.collapsed').getText());
}, 20000, 'Expected link text to contain number at the end');

如果需要,请在此处调整此正则表达式:

https://regex101.com/r/9d9yaJ/1

于 2020-06-24T12:27:17.110 回答