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
无论我尝试做什么,浏览器都会在它有机会找到我要查找的元素之前尝试 运行 测试太快。如果我输入一个简单的 "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.rbdef wait_for_ajax(sleep_sec = 4)
assert page.has_no_content?(:css, 'body.loading')
sleep sleep_sec if sleep_sec
end