【问题标题】:How to refresh a page on browser using selenium-webdriver?如何使用 selenium-webdriver 在浏览器上刷新页面?
【发布时间】:2018-12-29 00:25:33
【问题描述】:

按照以下部分代码:

driver.get "https://example.com/"

element = driver.find_element :name => "username"
element.send_keys "*****"
element = driver.find_element :name => "password"
element.send_keys "*****"
element.submit

现在是driver 在浏览器上打开 URL 时,有时 下一个页面,用户名和密码必须由 脚本,不来 - 这会导致脚本失败。一些中级 页面即将到来,要求我们点击“重试按钮”或“刷新 页'。因此,只要发生这种情况,脚本就会停止执行,如 没有得到提到的元素。

那么有没有办法用“睡眠”刷新中间页面 在进入“登录”页面之前,让脚本可以一次性运行?

【问题讨论】:

  • page.driver.browser.navigate.refresh 如果使用水豚
  • 对于水豚,我发现“访问 current_path”效果更好。

标签: ruby selenium-webdriver


【解决方案1】:

对于Capybara,我认为Tommyixi's comment是最好的:

访问 current_path

【讨论】:

  • 它将我重定向到登录页面
  • 完美运行。
  • 请注意,这将导致 URL 中的任何查询参数在刷新时丢失。如果这对您来说是个问题,我建议您使用本页中提到的其他方法之一。
  • 这可能有效,但其意图不如refresh
【解决方案2】:

正如@Nakilon 的评论中所述,Capybara 中的非 Poltergeist 驱动程序使用以下内容刷新当前页面:

page.driver.browser.navigate.refresh

但对于通用修复,请使用:

page.evaluate_script 'window.location.reload()'

【讨论】:

    【解决方案3】:

    你可以使用Navigation#refresh方法:

    driver.navigate.refresh
    

    【讨论】:

    • navigate 让您可以访问导航方法;类似于你会怎么做driver.navigate.to。为什么不只是 driver.refresh - 这是 ruby​​ 绑定开发人员的问题(即它只是设计 api 的偏好)。
    • 获取undefined local variable or method driver' for #<:examplegroups...>`
    • 我也得到未定义的局部变量或方法“驱动程序” - 有什么想法吗?
    • @RomanGaufman, driver 是一个Selenium::WebDriverinstance。您确定您已使用相同的变量声明它和/或可以在特定方法中访问它吗?
    • @RomanGaufman @mr.musicman 在使用 selenium 的 ruby​​ 中,驱动程序对象通常存储在变量 @browser 中。例如,如果您使用 PageObject,就会出现这种情况。
    【解决方案4】:

    对于水豚,我推荐

    page.evaluate_script("window.location.reload()")
    

    这也适用于 poltergeist/phantomjs

    【讨论】:

      【解决方案5】:

      在这种情况下,我编写了一些代码来检查输入字段是否存在。如果不存在,则刷新。

      driver.refresh()
      

      【讨论】:

      • 我不相信这适用于 ruby​​ 绑定(尽管它可能适用于其他一些绑定)。
      【解决方案6】:

      编辑:我最初的答案是假设正在使用 Capybara。

      您可以再次在页面上使用driver.get 进行刷新。在浏览器中单击刷新按钮和输入相同的 URL 以再次加载页面没有区别,因此 driver.get 足以满足此行为。

      【讨论】:

        【解决方案7】:

        您可以使用 - driver.navigate().refresh();

        例如看这里 - http://reditblog.blogspot.in/2014/10/how-to-refresh-current-web-page.html

        【讨论】:

        • 别人说它是driver.navigate.refresh。您的参考/链接不是红宝石,您的链接/参考,因此您的示例可能是 java 或 c#
        • 也就是说,我注意到 driver.navigate().todriver.navigate.to 都在 ruby​​ 中工作。
        猜你喜欢
        • 2015-10-31
        • 1970-01-01
        • 2012-01-14
        • 2021-04-05
        • 2016-09-16
        • 2021-01-13
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        相关资源
        最近更新 更多