加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

红宝石 – 如何用水母在两个框架之间切换

发布时间:2020-12-16 20:14:20 所属栏目:百科 来源:网络整理
导读:我正在尝试在2帧内做某事,但是当我尝试在帧之间切换时,每次都会出现错误. 例如: # encoding: utf-8require "capybara/dsl"Capybara.run_server = falseCapybara.current_driver = :seleniumCapybara.app_host = 'https://hb.posted.co.rs/posted'class Acco
我正在尝试在2帧内做某事,但是当我尝试在帧之间切换时,每次都会出现错误.
例如:
# encoding: utf-8

require "capybara/dsl"

Capybara.run_server = false
Capybara.current_driver = :selenium
Capybara.app_host = 'https://hb.posted.co.rs/posted'

class Account
  include Capybara::DSL

  def check_balance
    visit('/')
    page.driver.browser.switch_to.frame 'main'
    fill_in 'korisnik',:with => 'foo'
    fill_in 'lozinka',:with => 'bar'
    click_button 'Potvrda unosa'

    page.driver.browser.switch_to.frame 'header'
    click_on 'Stanje' 
  end
end

account = Account.new
account.check_balance

错误是:

[remote server]
file:///tmp/webdriver-profile20120810-9163-xy6dtm/extensions/fxdriver@googlecode.com/components/driver_component.js:6638:in
`unknown’: Unable to locate frame: main
(Selenium::WebDriver::Error::NoSuchFrameError)

问题是什么?也许我在这里做错事?

如果我改变切换帧的顺序,那么先尝试切换到’标题’,然后切换到’主’帧,然后相同的错误提高,除了它说这次没有’主’帧:

# encoding: utf-8

require "capybara/dsl"

Capybara.run_server = false
Capybara.current_driver = :selenium
Capybara.app_host = 'https://hb.posted.co.rs/posted'

class Account
  include Capybara::DSL

  def check_balance
    visit('/')
    page.driver.browser.switch_to.frame 'header'
    click_on 'Stanje' 

    page.driver.browser.switch_to.frame 'main'
    fill_in 'korisnik',:with => 'bar'
    click_button 'Potvrda unosa'
  end
end

account = Account.new
account.check_balance

错误:

[remote server]
file:///tmp/webdriver-profile20120810-9247-w3o5hj/extensions/fxdriver@googlecode.com/components/driver_component.js:6638:in
`unknown’: Unable to locate frame: main
(Selenium::WebDriver::Error::NoSuchFrameError)

解决方法

问题

问题是当您执行page.driver.browser.switch_to.frame时,它将页面的上下文切换到框架.所有针对该页面的操作现在实际上都是针对该框架的.所以当你第二次切换帧时,你实际上是在’main’框架内找到’header’框架(而不是我假设你想要的,主页面的’header’框架).

解决方案 – Capybara in_frame(推荐):

在框架内工作时,您应该使用Capybara的in_frame方法.你想做:

def check_balance
    visit('/')

    within_frame('main'){
      fill_in 'korisnik',:with => 'foo'
      fill_in 'lozinka',:with => 'bar'
      click_button 'Potvrda unosa'
    }

    within_frame('header'){
      click_on 'Stanje' 
    }
  end

解决方案 – Selenium switch_to:

如果您想自己进行框架管理(即不使用Capybara的内置方法),则可以将页面的上下文切换回浏览器,然后再转到第二个框架.这将如下所示.虽然我建议使用内置的Capybara方法.

def check_balance
    visit('/')
    page.driver.browser.switch_to.frame 'header'
    click_on 'Stanje' 

    #Switch page context back to the main browser
    page.driver.browser.switch_to.default_content

    page.driver.browser.switch_to.frame 'main'
    fill_in 'korisnik',:with => 'bar'
    click_button 'Potvrda unosa'
  end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读