watir:从URL获取params [:id]

时间:2014-02-10 07:28:27

标签: ruby-on-rails-3.2 integration-testing watir watir-webdriver automated-tests

我正在使用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]

感谢

3 个答案:

答案 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 来捕获 idsites/ 之间的 /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

通过这种方式,您无需将网址硬编码到测试中。