等到元素存在

时间:2017-08-04 13:20:58

标签: ruby selenium-webdriver

我搜索了stackoverflow上的每个线程,但无法找到适合我的问题的解决方案。在7/10的情况下,我的脚本正在下降,因为他们没有找到一个特定的元素。因此,我正在寻找一个机会告诉我的脚本"等待这么长时间,直到这个元素出现,然后点击它"。

我的代码如下:

require "json"
require "selenium-webdriver"
require "test/unit"

class LogIn < Test::Unit::TestCase

def setup
@driver = Selenium::WebDriver.for :chrome
@base_url = "url"
@accept_next_alert = true
@driver.manage.timeouts.implicit_wait = 30
@verification_errors = []
end
def teardown
@driver.quit
assert_equal [], @verification_errors
end
def test_sms_newsletter
#login
@driver.get "https://secure.shore.com/merchant/sign_in"
@driver.find_element(:id, "merchant_account_email").clear
@driver.find_element(:id, "merchant_account_email").send_keys "key"
@driver.find_element(:id, "merchant_account_password").clear
@driver.find_element(:id, "merchant_account_password").send_keys 
"password"
@driver.find_element(:name, "button").click
@driver.get "https://secure.shore.com"
verify { assert_equal "Shore - Manage your customers", @driver.title }
sleep 5
@driver.find_element(:css, "#asMain > header > a.as-Button.is-
active.as-Button--inverted").click

我所采取的元素是最后一个:

@driver.find_element(:css, "#asMain > header > a.as-Button.is-active.as-Button--inverted").click

有没有人有想法?

2 个答案:

答案 0 :(得分:1)

这是一个等待元素存在的片段。在使用之前,您可以在每个元素前放置一个这样的块。如果块超时,则测试失败。

require 'rubygems'
require 'selenium-webdriver'

browser = Selenium::WebDriver.for :firefox
browser.get "http://localhost/page3"

wait = Selenium::WebDriver::Wait.new(:timeout => 15)

# Add text to a text box
input = wait.until {
    element = browser.find_element(:css, "#asMain > header > a.as-Button.is-active.as-Button--inverted")
    element if element.displayed?
}
input.send_keys("Information")

答案 1 :(得分:0)

等待对你有用。尝试使用FluentWait。

如果仍存在问题,请使用JavascriptExecutor。它将直接通过JS运作。如果定位器正常,它应该工作。我给出了一个使用JavascriptExecutor

单击任何元素的示例
elementfield = browser.find_element(:css, "#asMain > header > a.as-Button.is-active.as-Button--inverted")
browser.execute_script('arguments[0].click();', elementfield)

希望它会对你有所帮助:)。