【发布时间】:2015-05-27 12:44:44
【问题描述】:
目前我正在尝试使用语句IF(如果页面中出现按钮,则运行IF),参见方法登录系统:
如果页面中没有出现按钮,我想运行下一个方法删除并添加新费用
require "selenium-webdriver"
require "rspec"
require "rspec/expectations"
describe "#Add simple expense and after add a receipt", :suitee => true do
before(:all) do
@driver = Selenium::WebDriver.for :chrome
@base_url = "http://sitetest.com"
@driver.manage.window.maximize
end
it "Login in the system" do
@driver.get(@base_url)
@driver.find_element(:id, "user_email").send_keys "rafael@gmail.com"
@driver.find_element(:id, "user_password").send_keys "123456"
@driver.find_element(:name, "commit").click
if(@driver.find_element(:css, ".btn.btn-lg.btn-success.btn-block").displayed?)
@driver.find_element(:css, ".btn.btn-lg.btn-success.btn-block").click
@driver.find_element(:css, ".introjs-button.introjs-skipbutton").click
@driver.find_element(:css, ".i.i-pencil").click
end
end
it "Remove and add new expense" do
begin
while(@driver.find_element(:css, ".i.i-pencil.icon").displayed?)
button = @driver.find_element(:id, "expense-bulk-select")
@driver.action.click(button).perform
delete = @driver.find_element(:id, "delete-multi-btn")
@driver.action.click(delete).perform
waitDisplayModal = Selenium::WebDriver::Wait.new(:timeout => 10)
waitDisplayModal.until {@driver.find_element(:class => "bootstrap-dialog-footer-buttons")}
@driver.find_element(:xpath, "//div[3]/div/div/button[2]").click
sleep 3
end
rescue Selenium::WebDriver::Error::NoSuchElementError
@driver.find_element(:id, "current_expense_merchant").send_keys "Taxi to work"
@driver.find_element(:id, "current_expense_amount").send_keys "50"
@driver.find_element(:id, "button-add-expense").click
waitDisplayIconTrash = Selenium::WebDriver::Wait.new(:timeout => 20)
waitDisplayIconTrash.until {@driver.find_element(:css => ".i.i-pencil.icon")}
end
end
after(:all) do
@driver.quit
end
end
我的问题:当我运行这个脚本时,在我的控制台中出现这个:
Failure/Error: if(@driver.find_element(:css, ".btn.btn-lg.btn-success.btn-block").displayed?)
Selenium::WebDriver::Error::NoSuchElementError:
no such element
(Session info: chrome=42.0.2311.135)
(Driver info: chromedriver=2.9.248304,platform=Linux 3.13.0-24-generic x86_64)
也就是说,IF 没有按我的意愿工作。我该如何解决?
干杯
【问题讨论】:
-
创建一个名为display的函数。检查元素是否显示。如果抛出异常,捕获它并返回 false。
-
事实上,我不想使用救援,因为它给出错误“Selenium WebDriver :: :: Error :: NoSuchElementError”,将运行救援方法“删除并添加新费用”。了解我吗?
-
你所做的是完全错误的。每个测试一次只能测试一件事。为按钮出现时的测试编写一个测试,为另一种情况编写另一个测试。您根本不应该真正使用 IF 语句,如果必须这样做,那是代码异味,而且您做错了。
-
@Arash M - 你有例子吗?
标签: ruby if-statement selenium rspec selenium-webdriver