如何在 Ruby 中使用 Selenium webdriver 截取警报的屏幕截图?

Posted

技术标签:

【中文标题】如何在 Ruby 中使用 Selenium webdriver 截取警报的屏幕截图?【英文标题】:How can I take a screenshot of an alert using Selenium webdriver in Ruby? 【发布时间】:2018-05-21 10:52:37 【问题描述】:

您好,我是 selenium 的新用户。我正在尝试在 ruby​​ 中使用 selenium webdriver 截取警报的屏幕截图。

@driver.find_element(:name, "updateButton").click
@driver.save_screenshot "./#Time.now.strftime("Alert_Screenshot___%d_%m_%Y__%H_%M_%S").png"

没有截屏,而是抛出了这个错误:

Selenium::WebDriver::Error::UnhandledAlertError

我当然可以接受警报:

@driver.switch_to.alert.accept

然后截图。但我想知道有没有办法在提示警报时截屏

【问题讨论】:

鉴于 Selenium 可以为您获取消息,拍摄警报的屏幕截图有什么意义。警报是由浏览器而不是页面创建的。 确实如此。获取屏幕截图的唯一原因是检查警报的消息...但是您可以使用Selenium 来执行此操作,无需截屏.. 【参考方案1】:

在您的情况下,您需要截取完整屏幕的屏幕截图,而不仅仅是浏览器。所以你可以使用xwd对根窗口进行截图:

xwd -display :0 -root|xwdtopnm |pnmtopng > $1

【讨论】:

我在 Windows 上工作,这是一个大脚本的一部分。知道如何使用 selenium webdriver 来做到这一点吗? Alert 不是 WebElement,因此很难使用 Selenium 处理,但您可以尝试使用 Winium(它是使用 Selenium 作为基础开发的)github.com/2gis/Winium

以上是关于如何在 Ruby 中使用 Selenium webdriver 截取警报的屏幕截图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 selenium webdriver 中自动化桌面通知 - ruby

如何让 Selenium/Ruby 机器人在执行操作之前等待?

无法在 Mac 上设置 ruby​​-selenium Webdriver

安装selenium webdriver ruby版的时候无论是线上安装,还是gem包下载下来安装都出现错误,求解决

Ruby:在 Shadow-Root DOM 中获取 Web 元素

即使在 selenium ruby​​ 脚本完成后如何让浏览器保持打开状态