2017-08-31 53 views
1

无论我尝试做什么,浏览器都会在它有机会找到要查找的元素之前尝试过快地运行测试。如果我放入一个简单的“睡眠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 

回答

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 
+0

只需添加到您的test_helper.rb中我给这个一杆,一有机会,我得到。我不相信我试过“展示?”。会发生什么事是它点击下拉菜单然后关闭浏览器太快,它没有时间来检测它。但是,让我试试这个镜头,我会尽快回复你,非常感谢! – Mike

+0

@ wait.until.displayed?确实有用。这可能是我们想要的解决方案。再次感谢。 – Mike

1

我们的团队使用了这一点,如果使用Rails

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

我们一直在使用睡眠,我们正试图远离他们,按照我们的老板的方向。它们非常有效,对我们非常有用。但是,在无头模式下运行时,睡眠时间都会改变,因为它似乎运行得更快,我们必须返回代码并更改每个测试来解释它们。但这是一个很好的解决方案,我们喜欢使用它们,但是我们的老板们更喜欢我们不要使用它们。 – Mike