我搜索了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
有没有人有想法?
答案 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)
希望它会对你有所帮助:)。