当元素不存在时,如何在WebDriver上处理测试

时间:2014-01-18 09:07:27

标签: ruby selenium-webdriver

我有一个测试来获取页面。页面上有大量的复选框,我正在寻找的复选框白天消失。

如果没有这样的复选框,我的测试处理将停止并出现以下错误:

  

...(Selenium :: WebDriver :: Error :: NoSuchElementError)...

我现在正在编写测试如下:

driver.navigate.to 'http://test.com/' 
driver.find_element(:id, "checkbox1").click

我希望测试忽略这些行,当页面上没有复选框时,只有当它出现时才尝试点击它。

2 个答案:

答案 0 :(得分:0)

Ruby允许你编写这样的代码:

driver.find_element(:id, "checkbox1").click if driver.find_element(:id, "checkbox1").displayed

但是,在这种情况下,由于“if”中的find_element会发生同样的错误。

但是,如果您编写方法或扩展WebDriver类,您可以执行以下操作;

driver.find_element(:id, "checkbox1").click if element_displayed?(driver,id: =>"checkbox1")

有很多方法可以解决这个问题,但你可以得到这个想法

答案 1 :(得分:0)

为了达到这个目的,你必须使用begin ...... rescue block,如下所示:

begin
  driver.find_element(:id, "checkbox1").click
rescue Selenium::WebDriver::Error::NoSuchElementError
  # do nothing
end

在上面的代码中,如果找到了元素,则会单击它。如果找不到,那就什么都不做;它只会捕获异常。