首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在下一个控制器操作中重用相同的watir对象

如何在下一个控制器操作中重用相同的watir对象
EN

Stack Overflow用户
提问于 2019-06-05 19:31:48
回答 1查看 107关注 0票数 0

我正在使用watir和无头浏览器。我需要执行三个步骤添加位置,添加车辆和从另一个网站获取产品,我想从另一个网站的信息。我从我的服务器提交这三个细节,并在watir和headless的帮助下在一个HTTP请求中执行所有这三个步骤。

我只想在我的服务器上将一个http请求分解为三个http请求。该请求将是: 1)add_location:触发一个http请求,它将打开headless browser并选择位置。

2)add_vehicle:触发一个http请求,它将重用添加了位置的无头浏览器,我们将选择车辆。

3)获取产品:触发一个http请求,该请求将重用添加了location和vehcile的无头浏览器来获取产品列表。

我没有任何办法重用watir和无头会话,它已经在rails端的下一个http请求中打开了。

代码示例:

代码语言:javascript
复制
class TestsController < ApplicationController

  def add_location
    @headless = Headless.new
    @headless.start
    @watir = Watir::Browser.new
    @watir.goto('www.google.com')
    @watir.text_field(id: 'findstore-input')
              .wait_until(&:present?).set(params[:zip_code])
    @watir.a(id: 'findstore-button').click
    @watir.div(class: 'notifier').wait_while(&:present?)
  end

  def add_vehicle
    #need to resuse above @watir object in this action
  end
end
EN

回答 1

Stack Overflow用户

发布于 2019-06-11 03:17:46

您可以使用钩子文件,以无头模式启动浏览器,并在单独的def中指定要调用的变量,以将url传递给浏览器。

例如:

在钩子中,您可以按如下方式添加它

@browser = Watir::Browser.new :chrome,选项:{args:'--headless'}

因此,您可以在一个def中重用@browser.goto('www.google.com'),也可以在其他调用中使用相同的实例。

def example1:@browser.goto('www.google.com')结束

def example2:@browser.goto('www.facebook.com')结束。。。等

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56459652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档