我正在使用Ruby / Selenium-WebDriver / Cucumber构建自动化套件。我想要实现的是在出现任何意外错误的情况下恢复黄瓜方案。
例如意外的弹出窗口
我可能会在应用程序的任何位置获得模态对话框。我希望我的代码在发生异常时关闭弹出窗口并恢复执行。
这样做的意思是,自动化套件将在多个系统上运行多天。除了日志和输出报告之外,不会有任何类型的监控。我不希望这些不必要的异常妨碍执行。
答案 0 :(得分:2)
鉴于警报可以随时打开,最好的选择可能是使用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代码或将元素/驱动程序转换为Watir(这是示例中所做的)。
创建侦听器后,需要在初始化期间将其传递给浏览器:
listener = AlertListener.new
browser = Watir::Browser.new :chrome, :listener => listener
答案 1 :(得分:0)
您可以通过接受screen
上弹出的任何提醒来实现目标。
您可以按照以下步骤执行此操作:
Given(/^I should see the error message and accept it$/) do
def alert_accept
end
end
所以每当有弹出窗口时,它都会接受并继续前进。
您也可以在此处找到此步骤: