Rspec;断言新的 window URL 字符串

Rspec; Assert new window URL string

我想提出一个断言,当我打开一个新的 window 时,断言 URL 现在包括 ?preview=true
我目前拥有的:

p @browser.url.include? '?preview=true'

然而,当我转到运行这个时,它总是returns错误。
如果我运行

p @browser.url

它正确读取了 url(显然,包括字符串的“?preview=true”部分)
有没有我缺少的方法来读取 url 字符串的 part

我认为您的方向是正确的。对于 Rspec 断言,您应该能够为部分 url:

尝试这样的事情
@browser.url.should include('?preview=true')

您还可以为完整 url 执行以下操作:

@browser.url.should == "google.com"

我怀疑您可能遇到了时间问题,检查可能是在 URL 更新之前进行的。

我刚才使用 IRB 手动测试了它以确保它应该工作,据我所知,它应该工作。

$irb
irb(main):001:0> require 'watir-webdriver'
=> true
irb(main):002:0> b = Watir::Browser.new :chrome
=> #<Watir::Browser:0x..f7db893ba0a186b8 url="data:," title="">
irb(main):003:0> b.goto 'http://google.com'
=> "http://google.com"
irb(main):004:0> puts b.url
https://www.google.com/?gws_rd=ssl
=> nil
irb(main):005:0> puts b.url.include? '?gws_rd'
true
=> nil
irb(main):006:0> puts b.url.include? '?gws_rd=ssl'
true
=> nil
irb(main):007:0> 

您可能需要添加某种同步点,例如等待由于本地 JS 代码(例如 ajax 调用之后)出现在页面上但不存在的元素当浏览器报告页面是 'loaded'

您可以通过在您尝试检查 URL 以查看它是否从一件事开始然后变成另一件事的地方插入一个微小的调试循环来对此进行测试。

50.times do
  puts @browser.url
  sleep 0.1
end