水豚中的正则表达式 have_xpath
Regex in capybara have_xpath
我有一个文本,当它被点击时会改变装饰。在我点击之前的测试中,我想检查它是否已经被点击过。它改变了我想检查的颜色、文字装饰和 href。
由于 href 包含会话特定信息,所以我想使用正则表达式。
if page.have_xpath("//a[contains(@href,\"%20Administrators?\")]")
即使页面已经更新并且管理员文本已更改为其他内容,这也会通过。
我应该如何更正语法以接受所有包含“%20Administrators”的 href?文本。我想将它添加到 if 子句中,就好像页面中有 link 和文本管理员一样。
点击前:href="/sometext/%20Administrators?redirect=sometext"
点击后:href="/sometext/%20Standard?redirect=sometext"
您在这里遇到的主要问题是使用 have_xpath
而不是 has_xpath?
。 have_xpath
returns 一个 RSpec 匹配器,因此当与 if
一起使用时将始终评估为真(因为它 returns 一个对象并且实际上还没有评估传入的任何 XPath)。 has_xpath?
returns 真或假的布尔结果。
if page.has_xpath?('.//a[contains(@href,"%20Administrators?")]')
第二个问题是您的问题询问的是正则表达式,但是 XPath 1.0(浏览器支持)不支持正则表达式并且您的 XPath 根本没有使用正则表达式(只是一个 contains
表达式) .如果你真的想使用正则表达式来测试 href(并且有更好的阅读代码)你应该使用 has_link?
布尔方法 - 沿着
if page.has_link?(href: /Administrators/)
如果需要,has_link?
也可以验证 link 的可见文本
if page.has_link?('Visible text of the link', href: /Administrators/)
最后,当将 XPath 与 Capybara 一起使用时,99% 的情况下您应该以 .//
开始您的 XPath 而不仅仅是 //
- 请参阅 https://github.com/teamcapybara/capybara#beware-the-xpath--trap - 这就是为什么通常使用 CSS and/or Capybara 提供的更具体的方法比 xxx_xpath
方法更干净。
另一件需要注意的事情是,所有提到的方法默认情况下都有等待行为,因此它们最多会等待 Capybara.default_max_wait_time
秒,以便页面有匹配的 link。如果您知道该页面是稳定的并且只想立即知道匹配的 link 是否存在,您可能希望将 wait: false
作为选项传递
if page.has_link?(href: /Administrators/, wait: false)
我有一个文本,当它被点击时会改变装饰。在我点击之前的测试中,我想检查它是否已经被点击过。它改变了我想检查的颜色、文字装饰和 href。
由于 href 包含会话特定信息,所以我想使用正则表达式。
if page.have_xpath("//a[contains(@href,\"%20Administrators?\")]")
即使页面已经更新并且管理员文本已更改为其他内容,这也会通过。
我应该如何更正语法以接受所有包含“%20Administrators”的 href?文本。我想将它添加到 if 子句中,就好像页面中有 link 和文本管理员一样。
点击前:href="/sometext/%20Administrators?redirect=sometext" 点击后:href="/sometext/%20Standard?redirect=sometext"
您在这里遇到的主要问题是使用 have_xpath
而不是 has_xpath?
。 have_xpath
returns 一个 RSpec 匹配器,因此当与 if
一起使用时将始终评估为真(因为它 returns 一个对象并且实际上还没有评估传入的任何 XPath)。 has_xpath?
returns 真或假的布尔结果。
if page.has_xpath?('.//a[contains(@href,"%20Administrators?")]')
第二个问题是您的问题询问的是正则表达式,但是 XPath 1.0(浏览器支持)不支持正则表达式并且您的 XPath 根本没有使用正则表达式(只是一个 contains
表达式) .如果你真的想使用正则表达式来测试 href(并且有更好的阅读代码)你应该使用 has_link?
布尔方法 - 沿着
if page.has_link?(href: /Administrators/)
如果需要,has_link?
也可以验证 link 的可见文本
if page.has_link?('Visible text of the link', href: /Administrators/)
最后,当将 XPath 与 Capybara 一起使用时,99% 的情况下您应该以 .//
开始您的 XPath 而不仅仅是 //
- 请参阅 https://github.com/teamcapybara/capybara#beware-the-xpath--trap - 这就是为什么通常使用 CSS and/or Capybara 提供的更具体的方法比 xxx_xpath
方法更干净。
另一件需要注意的事情是,所有提到的方法默认情况下都有等待行为,因此它们最多会等待 Capybara.default_max_wait_time
秒,以便页面有匹配的 link。如果您知道该页面是稳定的并且只想立即知道匹配的 link 是否存在,您可能希望将 wait: false
作为选项传递
if page.has_link?(href: /Administrators/, wait: false)