ruby/chrome 中的 Selenium,Selenium 等待将不起作用

Selenium in ruby/chrome, Selenium wait will not function

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

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 

我更熟悉 Java脚本或 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 

我们的团队使用这个,如果使用 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