我正在使用watir来测试我的rails 3 webapplication,它运行正常。
我的问题是,我当前的网页网址是localhot:3000/sites/535/ecosystem/new
。现在:
localhost:3000/sites/535/ecosystem/new
但我的问题是 我正在使用数据表来显示网站,它正在使用网站名称对网站列表进行排序。
一个解决方案 我遇到此问题的原因是,如果我可以从@id = params[:id]
获取localhost:3000/sites/535/ecosystem/new
,那么我可以这样做:
@browser.goto "localhost:3000/sites/#{@id}"
这是我的站点链接在仪表板页面中的URL。
从watir或watir-webdriver中的当前网址 如何 params[:id]
?
感谢
答案 0 :(得分:1)
我已经用ruby逻辑解决了这个问题 ,但仍在等待一些好的逻辑。
Solution
url = @browser.url
#> ["localhost:3000/sites/535/ecosystem/new"]
uri = url.split("/sites/")
#> ["localhost:3000", "535/ecosystem/new"]
uri = uri[1].split("/ecosystem/new")[0]
#> "535"
我现在可以在当前网址中访问id
,即535
。但是仍然需要一些解决这个问题的好逻辑。
由于
答案 1 :(得分:1)
不确定这对您来说是否足够“好的逻辑”,但无论如何,这是另一种更直接的方式。
在 URL 上使用 RegEx 来捕获 id
和 sites/
之间的 /ecosystem
值:
@browser.url.match( /(?!sites\/)([0-9]*)(?=\/ecosystem)/ ).captures.first
#=> "535"
如果您不熟悉 RegEx,那么这看起来比实际更复杂。它本质上只是找到 sites/
和 /ecosystem
,然后“捕获”介于两者之间的任意数量的数字(0 到 9 之间)。
您可以在此处直观地使用 RegEx 模式:https://regexr.com/5q1eg
答案 2 :(得分:0)
不,你不能在那里使用Rails助手params[:id]
,因为它对Watir没有意义。
但是,有两种方法可以解决这个问题。
第一种可能的方法是像你一样解析URL:
@browser.url.scan(%r{/(\d+)/}).flatten[0] # => "535"
另一种方法是使用Rails模型本身。假设你知道你正在寻找的网站的名称(如果你不知道你最终是如何在网址上结束的?)那么你可以直接从数据库中获取它:
Site.where(name: "my site").first.id # => "535"
你也可以使用Rails url helper将它们包含在你的测试代码中(未经测试的代码):
include Rails.application.routes.url_helpers
@browser.goto new_site_url
通过这种方式,您无需将网址硬编码到测试中。