Ruby on rails 3.2 watir:从URL获取参数[:id]
我正在使用watir测试我的rails3webapplication,它运行良好 我的问题是,我当前的页面url是Ruby on rails 3.2 watir:从URL获取参数[:id],ruby-on-rails-3.2,integration-testing,watir,watir-webdriver,automated-tests,Ruby On Rails 3.2,Integration Testing,Watir,Watir Webdriver,Automated Tests,我正在使用watir测试我的rails3webapplication,它运行良好 我的问题是,我当前的页面url是localhot:3000/sites/535/ecosystem/new。现在: 我想从页面注销并重新登录 然后,我将进入仪表板页面,在那里我将显示站点列表 我想点击最后创建的站点名称,这样,我就可以将我重定向回我离开该研究的相同状态,即localhost:3000/sites/535/economy/new 但我的问题是我使用datatable来显示站点,它使用sitenam
localhot:3000/sites/535/ecosystem/new
。现在:
- 我想从页面注销并重新登录李>
- 然后,我将进入仪表板页面,在那里我将显示站点列表
- 我想点击最后创建的站点名称,这样,我就可以将我重定向回我离开该研究的相同状态,即
localhost:3000/sites/535/economy/new
localhost:3000/sites/535/economy/new
获取@id=params[:id]
,那么我可以:
@browser.goto "localhost:3000/sites/#{@id}"
这是仪表板页面中“我的站点”链接的url
如何从watir或watir webdriver中的当前URL获取参数[:id]
谢谢我已经用ruby logic解决了这个问题,但仍在等待一些好的逻辑
解决方案
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"
我现在可以访问当前url中的id
即535
。但仍在等待一些好的逻辑来解决这个问题
谢谢我已经用ruby logic解决了这个问题,但仍在等待一些好的逻辑
解决方案
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"
我现在可以访问当前url中的id
即535
。但仍在等待一些好的逻辑来解决这个问题
谢谢不,您不能在那里使用Rails帮助程序作为
参数[:id]
,因为它对Watir没有意义
然而,有两种可能的方法来解决这个问题
第一种可能的方法是像您一样解析URL:
@browser.url.scan(%r{/(\d+)/}).flatten[0] # => "535"
另一种方法是使用Rails模型本身。假设您知道要查找的站点的名称(如果不知道,那么您是如何找到url的?),那么您可以直接从数据库中获取该名称:
Site.where(name: "my site").first.id # => "535"
您还可以通过将Rails url帮助程序包含到测试代码(未测试代码)中来使用它们:
这样,您就不必将URL硬编码到测试中。不,您不能将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帮助程序包含到测试代码(未测试代码)中来使用它们:
这样,您就不必将URL硬编码到测试中。使用RegEx
不确定这对你来说是否足够“好的逻辑”,但无论如何,这是另一种更直接的方式
在URL上使用正则表达式捕获站点/
和/economy
之间的id
值:
@browser.url.match(/(?!sites\/)([0-9]*)(?=\/生态系统)/).captures.first
#=> "535"
如果您不熟悉正则表达式,那么这看起来比实际情况更复杂。它基本上只是查找站点/
和/economy
,然后“捕获”中间任意数量的数字(介于0和9之间)
您可以在此处直观地使用RegEx模式:使用RegEx
不确定这对你来说是否足够“好的逻辑”,但无论如何,这是另一种更直接的方式
在URL上使用正则表达式捕获站点/
和/economy
之间的id
值:
@browser.url.match(/(?!sites\/)([0-9]*)(?=\/生态系统)/).captures.first
#=> "535"
如果您不熟悉正则表达式,那么这看起来比实际情况更复杂。它基本上只是查找站点/
和/economy
,然后“捕获”中间任意数量的数字(介于0和9之间)
您可以在这里直观地使用RegEx模式:那么您的意思是535是站点的id?是的,您是对的。我想获取
535
并将这个id存储在某个变量中,这样我就可以使用它了。你是说535是站点的id吗?是的,你是对的。我想获取535
并将这个id存储在某个变量中,这样我就可以使用它了。您认为什么是“良好的逻辑”?你的意思是除了解析字符串之外的其他东西吗?我的意思是,我们可以像params[:id]
那样直接访问它吗。上述解决方案对我来说很有效。我仍然在想,是否有一种方法可以像我们在rails中使用params[:id]
一样处理它。你认为什么是“好的逻辑”?你的意思是除了解析字符串之外的其他东西吗?我的意思是,我们可以像params[:id]
那样直接访问它吗。上述解决方案对我来说很有效。我仍然在想,是否有一种方法可以像我们在rails中使用params[:id]
一样处理它。