Rspec的;断言新窗口URL字符串

时间:2016-08-01 15:03:17

标签: url rspec watir-webdriver assertion

我想提出一个断言,当我打开一个新窗口时,断言网址现在包含?preview=true
到目前为止我所拥有的:

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

然而,当我去运行它时,它总是返回false。
如果我跑

p @browser.url

它正确读取url(显然,包括字符串的“?preview = true”部分)
是否有一种方法我没有阅读url字符串的 part

2 个答案:

答案 0 :(得分:1)

我认为你走在正确的轨道上。对于Rspec断言,你应该可以尝试这样的部分url:

@browser.url.should include('?preview=true')

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

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

答案 1 :(得分:0)

我怀疑您可能有计时问题,可能会在更新网址之前进行检查。

我刚刚使用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调用之后),但在浏览器报告页面时不存在是'加载'

你可以通过在你试图检查URL的位置插入一个微小的调试循环来测试这一点,看看它是从一件事开始并改为另一件事。

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