【问题标题】:watir: Fetch params[:id] from URLwatir:从 URL 获取 params[:id]
【发布时间】:2014-02-10 07:28:27
【问题描述】:

我正在使用 watir 测试运行良好的 rails 3 web 应用程序。

我的问题是,我当前的页面网址是localhot:3000/sites/535/ecosystem/new。现在:

  • 我想退出页面并重新登录。
  • 然后,我将到达显示网站列表的仪表板页面。
  • 我想单击最后创建的站点名称,以便将我重定向回我离开该研究的相同状态,即localhost:3000/sites/535/ecosystem/new

但我的问题是我正在使用数据表来显示站点,并且它正在使用站点名称对站点列表进行排序。

一个解决方案我解决了这个问题,如果我可以从localhost:3000/sites/535/ecosystem/new 获取@id = params[:id],那么我可以这样做:

@browser.goto "localhost:3000/sites/#{@id}"

这是仪表板页面中我的网站链接的网址。

如何获取 params[:id] 从 watir 或 watir-webdriver 中的当前 URL 获取?

谢谢

【问题讨论】:

  • 所以你的意思是 535 是网站的 id?
  • 是的,你是对的。我想获取 535 并将这个 id 存储在某个变量中,以便我可以使用它

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


【解决方案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。但仍然需要一些好的逻辑来解决这个问题。

谢谢

【讨论】:

  • 你认为什么是“好的逻辑”?你的意思不是解析字符串吗?
  • 我的意思是,我们可以像params[:id] 一样直接访问它。以上解决方案对我来说效果很好。我仍然在想是否有一种方法来处理它,就像我们使用params[:id] 在rails 中处理一样。
【解决方案2】:

不,您不能在那里将 Rails 助手用作 params[:id],因为这对 Watir 没有意义。

但是,有两种可能的方法可以解决这个问题。

第一种可能的方法是像您一样解析 URL:

@browser.url.scan(%r{/(\d+)/}).flatten[0] # => "535"

另一种方法是使用 Rails 模型本身。假设您知道您要查找的网站的名称(如果您不知道,那么您是如何获得该 url 本身的?)然后您可以直接从数据库中获取它:

Site.where(name: "my site").first.id # => "535"

您还可以通过将 Rails url 帮助程序包含到您的测试代码(未经测试的代码)中来使用它们:

include Rails.application.routes.url_helpers
@browser.goto new_site_url

这样您就不必将网址硬编码到您的测试中。

【讨论】:

    【解决方案3】:

    使用正则表达式

    不确定这对您来说是否足够“好逻辑”,但无论如何,这是另一种更直接的方式。

    在 URL 上使用 RegEx 来捕获介于 sites//ecosystem 之间的 id 值:

    @browser.url.match( /(?!sites\/)([0-9]*)(?=\/ecosystem)/ ).captures.first
    #=> "535"
    

    如果您不熟悉 RegEx,那么这看起来比实际情况要复杂。它本质上只是找到sites//ecosystem,然后“捕获”介于两者之间的任意数量的数字(0 到 9 之间)。

    您可以在此处直观地使用 RegEx 模式:https://regexr.com/5q1eg

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      • 2020-01-30
      • 2016-01-20
      相关资源
      最近更新 更多