使用Selenium,Ruby
我正在尝试学习在对象不存在时结束测试的正确方法。例如,我有一个调用函数“ Click_Login”的测试,该函数依次转到该函数并返回对象引用或文本“ Stop Test”(如果不存在)。那部分工作正常。
但是,在关闭浏览器之后,测试将继续进行,并尝试运行varLoginBtn.click并失败,因为 Stop Test.click 不存在。我认为该测试将在driver.quit之后停止,而不继续进行varLoginBtn.click。
我的目标是在对象不存在的情况下彻底停止测试。我可能做错了。
#The test.rb
varLoginBtn = toNavigate.Click_LogIn(driver) #calls function down below.
if varLoginBtn == "Stop Test"
driver.quit
end
varLoginBtn.click #click on the button
#functions.rb
#in the Class toNavigate
#Login Button
def Click_LogIn(driver)
puts "In the login"
wait = Selenium::WebDriver::Wait.new(:timeout => 15)
begin
element= wait.until{driver.find_element(:xpath, "//*[@xas-string='SDE_LOG_INN']")} #Log_INN is intentional I want it to fail.
return element
rescue
puts "The Login button did not exist"
return "Stop Test"
end
end
感谢您的帮助。
答案 0 :(得分:0)
您无需解救,您可以设置nil为零,并且可以使用abort退出带有消息的脚本
但也可以将snake_case用于def ruby方法
def click_login(driver)
puts "In the login"
wait = Selenium::WebDriver::Wait.new(:timeout => 15)
if element = wait.until{driver.find_element(:xpath, "//*[@xas-string='SDE_LOG_INN']")} #Log_INN is intentional I want it to fail.
return element
else
puts 'The Login button did not exist'
abort 'Stop Test'
end
end
答案 1 :(得分:0)
这是一种过度设计的方法...为什么不只在发生这种情况时抛出异常,并通过良好的提示让测试消亡?像
...
rescue
raise "The Login button did not exist"
end
您的测试库应该能够处理此问题,并打印出可用于调查等的好消息。
详细了解ruby here中的异常。