2016-08-01 31 views
1

我想放在一起的说法是,当我打开一个新的窗口,声称该URL现在包括?preview=true
我到目前为止有:Rspec;断言新窗口的URL字符串

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

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

p @browser.url 

它正确地读取URL(包括,很明显,“?预览=真正的”字符串的一部分)
是否有读部分的方法我失踪的url字符串?

+0

只是要清楚,你用['.use'(http://www.rubydoc.info/gems/watir-webdriver/Watir/Window#use-instance_method),以 “重视”产生的窗口? – orde

+0

@orde,是的,我确定使用'.use'。这就是为什么我使用'2P @ browser.url'所以我确信我读正确的信息 – kmancusi

回答

1

我认为你是在正确的轨道上。对于Rspec的说法,你应该可以尝试这样的事情了部分网址:

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

你也可以做完整的网址如下:

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

您的断言想法是类似于最后我用跑的初步测试的一部分。注意:'should'被认为是过时的语法(从我的理解),我写我的说法是这样的:'希望(@ browser.url)。为了包括(“预览=真的吗?”)' – kmancusi

+0

啊,这是正确的。它已被弃用。很高兴该解决方案的帮助。 – Mallory

0

我怀疑你可能有一个计时问题,可能在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调用后),但不存在时,浏览器报告页面被“加载”

您可以在您正试图查询的网址,看它是否启动了一两件事,改变到另一个点插入一个小小的调试循环可能进行测试。

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