【问题标题】:Selenium in ruby/chrome, Selenium wait will not function红宝石/铬中的硒,硒等待不起作用
【发布时间】:2018-02-09 21:31:43
【问题描述】:

无论我尝试做什么,浏览器都会在有机会找到我正在寻找的元素之前尝试过快地运行测试。如果我输入一个简单的“sleep 2”,它就有机会下拉菜单并加载并成功找到该元素。但我想学习使用 Selenium Wait 命令。我尝试了以下多种组合,并在网上查看了文档或示例。我发现了很多 Firefox,人们说下面的一些东西在 Firefox 中完美运行,但是对于我和我的项目团队伙伴来说,我们无法让任何等待,无论是隐式的还是显式的,暂停足够长的时间让它检测到元素。该元素不存在,直到下拉菜单被完全删除,然后它才能检测到它。不需要 2 秒,但似乎我的等待命令实际上都不会让它等待。就像我说的,我尝试了许多不同的东西,几乎所有的东西都在下面。如果有人可以帮助指导我,我将不胜感激。这是我尝试过的一些代码:

def setup
    @driver = Selenium::WebDriver.for :chrome
    @driver.get "https://website.herokuapp.com/"
    @wait = Selenium::WebDriver::Wait.new(:timeout => 10) # seconds
    # @driver = Selenium::WebDriver.for:chrome
    # @driver.manage.timeouts.implicit_wait = 30
    # @wait = Selenium::WebDriver::Wait.new(:timeout => 15)
    # @wait = Selenium::WebDriver::Wait.new(:timeout => 10)
    # @driver.manage.timeouts.implicit_wait = 10
    # @wait = Selenium::WebDriver::Wait.new(timeout: 10)
    @driver.manage.window.maximize()
    # @driver.navigate.to("https://website.herokuapp.com/")

结束

def test_user_name_is_present
    login()

    @driver.find_element(:class, "navbar-toggle").click()
    # user = @driver.find_element(:class, "dropdown-toggle").text
    # @wait.until{@driver.find_element(:class, "dropdown-toggle")}
    @driver.find_element(:class, "dropdown-toggle")
    @wait.until { @driver.find_element(:class => "dropdown-toggle") }
    user = @driver.find_element(:class, "dropdown-toggle").text
    assert_equal(true, user.include?('HEATHER'), "no user") 
  end 

【问题讨论】:

    标签: ruby google-chrome selenium wait


    【解决方案1】:

    我更熟悉 JavaScript 或 Java 绑定。

    但是呢:

    def test_user_name_is_present
        login()
    
        @driver.find_element(:class, "navbar-toggle").click()
        @wait.until { @driver.find_element(:class => "dropdown-toggle").displayed? }
        user = @driver.find_element(:class, "dropdown-toggle").text
        assert_equal(true, user.include?('HEATHER'), "no user") 
      end 
    

    【讨论】:

    • 我一有机会就试一试。我不相信我试过“显示?”。发生的情况是它单击下拉菜单然后关闭浏览器的速度如此之快以至于没有时间检测它。但让我试一试,我会尽快回复您,非常感谢!
    • @wait.until.displayed?确实有效。这可能是我们想要的解决方案。再次感谢。
    【解决方案2】:

    我们的团队使用这个,如果使用 Rails,只需添加到您的 test_helper.rb

    def wait_for_ajax(sleep_sec = 4)
      assert page.has_no_content?(:css, 'body.loading')
      sleep sleep_sec if sleep_sec
    end
    

    【讨论】:

    • 按照我们老板的指示,我们一直在使用睡眠,我们正努力远离它们。它们非常有效,对我们非常有用。然而,当涉及到在无头模式下运行时,睡眠时间都会发生变化,因为它似乎运行得更快,我们必须返回我们的代码并更改每个测试以解决它们。但这是一个很好的解决方案,我们喜欢使用它们,但我们的老板不希望我们使用它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 2018-12-15
    • 2019-04-27
    相关资源
    最近更新 更多