如果出现任何错误,继续在 Cucumber 中执行
Continue execution in Cucumber in case of any errors
我正在使用 Ruby/Selenium-WebDriver/Cucumber 构建一个自动化套件。我想要实现的是在出现任何意外错误的情况下恢复黄瓜场景。
例如意外弹出窗口
我可能会在应用程序的任何位置看到一个模式对话框。我希望我的代码在异常发生时关闭弹出窗口并恢复执行。
这样做的目的是,自动化套件将 运行 在多个系统上运行多天。除了日志和输出报告之外,不会有任何类型的监控。我不希望这些不需要的异常妨碍执行。
您可以通过接受 screen
上弹出的任何警报来实现您的目标。
您可以按照以下步骤进行操作:
Given(/^I should see the error message and accept it$/) do
def alert_accept
end
end
所以只要有弹出窗口,它就会接受它并继续前进。
您也可以在此处找到此步骤:
鉴于可以随时打开警报,最好的选择可能是使用 AbstractEventListener
。这允许您在 Selenium 与浏览器交互之前(或之后)执行操作。这意味着您可以在每次交互之前立即调用警报关闭代码。
示例事件侦听器定义如下:
class AlertListener < Selenium::WebDriver::Support::AbstractEventListener
def close_alerts(driver)
# Assuming you want to handle the dialogs using Watir code instead of Selenium,
# convert the Selenium::WebDriver to a Watir::Browser
browser = Watir::Browser.new(driver)
# Run whatever code you have for handling the dialog instances
browser.alert.ok if browser.alert.exists?
end
def before_change_value_of(element, driver)
close_alerts(driver)
end
def before_click(element, driver)
close_alerts(driver)
end
def before_close(driver)
close_alerts(driver)
end
def before_execute_script(script, driver)
close_alerts(driver)
end
def before_find(by, what, driver)
close_alerts(driver)
end
def before_navigate_back(driver)
close_alerts(driver)
end
def before_navigate_forward(driver)
close_alerts(driver)
end
def before_navigate_to(url, driver)
close_alerts(driver)
end
def before_quit(driver)
close_alerts(driver)
end
end
请注意,您可以将 close_alerts
方法替换为您已经编写的用于处理警报的任何代码。事件侦听器是 Selenium,这意味着您需要编写 Selenium 代码或将 element/driver 转换为 Watir(示例中就是这样做的)。
创建监听器后,需要在初始化期间将其传递给浏览器:
listener = AlertListener.new
browser = Watir::Browser.new :chrome, :listener => listener
我正在使用 Ruby/Selenium-WebDriver/Cucumber 构建一个自动化套件。我想要实现的是在出现任何意外错误的情况下恢复黄瓜场景。
例如意外弹出窗口
我可能会在应用程序的任何位置看到一个模式对话框。我希望我的代码在异常发生时关闭弹出窗口并恢复执行。
这样做的目的是,自动化套件将 运行 在多个系统上运行多天。除了日志和输出报告之外,不会有任何类型的监控。我不希望这些不需要的异常妨碍执行。
您可以通过接受 screen
上弹出的任何警报来实现您的目标。
您可以按照以下步骤进行操作:
Given(/^I should see the error message and accept it$/) do
def alert_accept
end
end
所以只要有弹出窗口,它就会接受它并继续前进。
您也可以在此处找到此步骤:
鉴于可以随时打开警报,最好的选择可能是使用 AbstractEventListener
。这允许您在 Selenium 与浏览器交互之前(或之后)执行操作。这意味着您可以在每次交互之前立即调用警报关闭代码。
示例事件侦听器定义如下:
class AlertListener < Selenium::WebDriver::Support::AbstractEventListener
def close_alerts(driver)
# Assuming you want to handle the dialogs using Watir code instead of Selenium,
# convert the Selenium::WebDriver to a Watir::Browser
browser = Watir::Browser.new(driver)
# Run whatever code you have for handling the dialog instances
browser.alert.ok if browser.alert.exists?
end
def before_change_value_of(element, driver)
close_alerts(driver)
end
def before_click(element, driver)
close_alerts(driver)
end
def before_close(driver)
close_alerts(driver)
end
def before_execute_script(script, driver)
close_alerts(driver)
end
def before_find(by, what, driver)
close_alerts(driver)
end
def before_navigate_back(driver)
close_alerts(driver)
end
def before_navigate_forward(driver)
close_alerts(driver)
end
def before_navigate_to(url, driver)
close_alerts(driver)
end
def before_quit(driver)
close_alerts(driver)
end
end
请注意,您可以将 close_alerts
方法替换为您已经编写的用于处理警报的任何代码。事件侦听器是 Selenium,这意味着您需要编写 Selenium 代码或将 element/driver 转换为 Watir(示例中就是这样做的)。
创建监听器后,需要在初始化期间将其传递给浏览器:
listener = AlertListener.new
browser = Watir::Browser.new :chrome, :listener => listener