javascript Cypress -如何检查URL是否包含数字

wf82jlnq  于 2022-12-02  发布在  Java
关注(0)|答案(3)|浏览(154)

我的URL包含分配给特定项目的数字,因此可能是1、2、...、999等。
示例:https://www.test.com/items.889218.html
我要作这样的Assert:

cy.url().should('contain', '/items.').and('have', 'number')

我试着举例:

cy.url().invoke('text').should('match', /^[0-9]*$/)

cy.location().should((loc) => {
  expect(loc.pathname).to.contain(/^[0-9]*$/);
});

也提供这种路径:

"/items\.+[0-9]+.html/"

但这两个例子都不起作用。有什么想法如何处理这种情况吗?

xt0899hw

xt0899hw1#

对于示例https://www.test.com/items.889218.html,最简单的正则表达式是

cy.url().should('match', /https:\/\/www\.test\.com\/items.[0-9]+\.html/)

但如果你不在乎数字的话

cy.url()
  .should('satisfy', (url) => url.startsWith('https://www.test.com/items.'))
  .and('satisfy', (url) => url.endsWith('.html'))

参考编号TypeError: expect(...).to.startsWith is not a function

bmp9r5qi

bmp9r5qi2#

答案:

cy.location().should((loc) => {
  expect(loc).to.match(/https:\/\/www\.test\.com\/items\/(\d+).html/)
})

// or

cy.url().should('match', /https:\/\/www\.test\.com\/items\/(\d+).html/)

说明:

因为使用了$选择器,所以正则表达式查询也会查看字符串的末尾,但示例URL的末尾是.html。选择是将.html添加到模式中,还是删除$选择器。

https://www.test.com/items/[number].html

                                    ^^^^

试试看:

(https:\/\/www\.test\.com\/items\/)(\d)+

或者至少删除字符串匹配结尾处的$

/https:\/\/www\.test\.com\/items\/([0-9]+)/

regexr上测试

解释(针对备注中的问题):

预期/items.8655.html包含/项目。/[0-9]+/失败
此模式在items.number之间包含一个.。如果需要覆盖此新变体和前一个。(\/|\.)+将匹配一个或多个,\和/或.

cy.url().should('match', /https:\/\/www\.test\.com\/items(\/|\.)+[0-9]+.html/)

因此,上述更改将匹配如下URL:

https://www.test.com/items.8655.html
https://www.test.com/items/8655.html
https://www.test.com/items/.8655.html
mu0hgdu0

mu0hgdu03#

您不需要调用从cy.url生成的值的文本内容,因为它已经是一个字符串。
此外,您的正则表达式不正确。它只匹配以数字开始、包含数字和以数字结尾的字符串。
修复上面的,你可以有这样的东西...

cy.url().should('match', /https:\/\/www\.test\.com\/items\/(\d*)\.html/)

相关问题