Selenium 2 和 JUnit4:如何捕获异常屏幕截图?

2024-03-21

我只想在意外异常时捕获屏幕截图。


Note.- This answer could be outdated. The answer is based on Selenium 2.15

Using 测试观察者 http://kentbeck.github.com/junit/javadoc/latest/index.html?org/junit/rules/TestWatcher.html可以解决这个问题(单元测试必须扩展以下内容BaseTest):

public abstract class BaseTest {
// ...
protected WebDriver driver;


@Rule
public TestRule testWatcher = new TestWatcher() {
    @Override
    public void starting(Description desc) {
        LOG.info("Launching browser...");
        driver = Utils.getFirefoxDriver();
    }

    @Override
    public void finished(Description desc) {
        LOG.info("Quitting driver...");
        driver.quit();
    }

    @Override
    public void failed(Throwable e, Description d) {
        LOG.debug("Creating screenshot...");
        File scrFile = ((TakesScreenshot) driver).getScreenshotAs(
                OutputType.FILE);
        String scrFilename = "Screenshot.png";
        File outputFile = new File(SCREEN_SHOTS_RESULTS_PATH, scrFilename);
        LOG.info(scrFilename + " screenshot created.");
        try {
            org.​apache.​commons.​io.FileUtils.copyFile(scrFile, outputFile);
        } catch (IOException ioe) {
            LOG.error("Error copying screenshot after exception.", ioe);
        }
    }
};
}

Note

Utils.getFirefoxDriver()返回一个定制的WebDriver。就像是:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxBinary;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;

public class Utils {
    // ...
    public static WebDriver getFirefoxDriver() {
        FirefoxProfile firefoxProfile = new FirefoxProfile();

        // Profile customization. For example:
        // firefoxProfile.addExtension("firebug-1.8.4-fx.xpi");
        // firefoxProfile.setPreference("extensions.firebug.currentVersion","1.8.4");

        FirefoxBinary firefox = new FirefoxBinary();

        // Firefox customization. For example:
        // firefox.setEnvironmentProperty("DISPLAY", display);

        WebDriver driver = new FirefoxDriver(firefox, firefoxProfile);

        // WebDriver customizations. For example:
        // driver.manage().timeouts().implicitlyWait(SHORT_TIMEOUT_S, TimeUnit.SECONDS);
        return driver;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium 2 和 JUnit4:如何捕获异常屏幕截图? 的相关文章

随机推荐

  • 我可以用javascript创建下雨效果吗?

    我需要为我的网站实现这样的目标 闪光雨效果 http active tutsplus com tutorials effects create a rain effect in flash using actionscript 30 这可以
  • 在 64 位机器上,我可以安全地并行操作 64 位四字的各个字节吗?

    背景 我正在对图像中的行和列进行并行操作 我的图像是 8 位或 16 位像素 而我使用的是 64 位机器 当我并行对列进行操作时 两个相邻列可能共享相同的 32 位int或 64 位long 基本上 我想知道是否可以安全地并行操作同一四字的
  • 忽略正则表达式匹配中的换行符

    我正在尝试使用以下脚本将所有匹配的事件替换为标题大小写 当过滤词之间有换行符 在本例中为 ABC 和 DEF 时 该行不会按预期被替换 在这种情况下如何忽略换行符 编辑 我不想从字符串中完全删除所有换行符 而只想删除过滤词之间的换行符 Ed
  • 加载 YouTube 视频并收听 onPlayerStateChange

    单击链接后 我尝试播放 YouTube 视频 并在播放完毕后用图像替换该视频 上半场很轻松 然而我在下半场遇到了麻烦 最初我只是简单地附加了一个iframe嵌入 然而要听ENDED事件中 我尝试遵循 YouTube 开发文档 现在 我似乎什
  • DB2 v9.5 类型 2 驱动程序的 JPA 2.0 Provider Hibernate 3.6 在配置准备中抛出异常

    JPA 2 0 Provider Hibernate 在为实体管理器工厂准备配置时抛出异常 我正在使用 DB2 v9 5 数据库和 DB2 v9 5 JDBC 类型 2 驱动程序 java sql SQLException IBM JDBC
  • Python 有同步吗?

    The 同步手册页 http linux die net man 2 sync says sync 导致对文件元数据和数据的所有缓冲修改 写入底层文件系统 Python 是否有调用来执行此操作 附 不是fsync http docs pyt
  • 在运行时更改 AR core 中对象的纹理

    我正在创建一个应用程序 我需要在其中更改 3d 对象的纹理 图案 我正在使用 AR Core SDK 和 android 我已经使用了下面的代码 但它不起作用 Texture builder setSource this R drawabl
  • Clojure 中的块注释

    如何在 Clojure 中注释多行 其实 还有办法 comment 定义嘿 嘿 对我进行检查
  • 使用 DT(DataTables 按钮扩展)导出表格时保持格式

    我制作了一个闪亮的应用程序 有人上传文件 计算一些比率 并且可以使用阈值滑块来格式化这些比率 我用DT formatStyle为此 它工作得非常好 据我了解这个函数 它创建一个回调来处理条件格式 然后 我想使用按钮扩展导出数据DT 我想在导
  • 正则表达式在 if 语句中将字符串与空格匹配(使用引号?)

    我将如何进行如下所示的正则表达式匹配 但在 This 周围加上引号 就像在现实世界中 This 将是一个可以在其中包含空格的字符串 bin bash text This is just a test string if text This
  • 分布式事务:.NET Framework 与 .NET Core

    我有以下代码示例 static void Main string args TransactionManager DistributedTransactionStarted sender eventArgs gt Console Write
  • SSE 和 AVX MoveMask 的用途是什么

    问题 MoveMask 的目的或意图是什么 学习如何使用 x86 x86 64 汇编 SSE AVX 的最佳地点是哪里 我可以更有效地编写代码吗 提问原因 我有一个用 F for NET 编写的使用 SSE2 的函数 我使用 AVX2 写了
  • 仅检索 Java 类中声明的静态字段

    我有以下课程 public class Test public static int a 0 public int b 1 是否可以使用反射来仅获取静态字段的列表 我知道我可以获得所有字段的数组Test class getDeclaredF
  • Android Google 地图 v2 删除默认标记

    我在我的 Android 应用程序中实现了 Android Google Maps v2 没有任何问题 但是 地图包含一些我未包含的 默认标记 我的意思是 一些私人营业地点 是否可以从地图上删除这些标记 以便我只获得城市名称和街道名称 只需
  • 捕获 Camera2 预览帧返回空缓冲区

    我一直在开发一个简单的 Android 应用程序 旨在将流式相机帧从 Android Camera2 API 管道传递到我的算法 我已经制作了几个应用程序 忠实地使用 Android Camera1 API 执行此操作 但即使在检查 Goo
  • 设置证书验证位置时出错

    OS Ubuntu 16 01 PHP 7 0 根据一些谷歌搜索以及 StackOverflow 上问题的输入 我设置以下 Curl 选项 CURLOPT SSL VERIFYPEER gt true CURLOPT SSL VERIFYH
  • 在emacs中使用flymake和tramp远程运行pyflakes?

    我正在尝试使用 Flymake 来运行 pyflakes 如建议的那样here http www emacswiki org cgi bin wiki PythonMode toc9 这对于本地文件来说效果很好 并且几乎可以通过一些调整来处
  • Bootstrap网格系统-如何使两列高度相等? [复制]

    这个问题在这里已经有答案了 如何在 Bootstrap 网格列中使两列具有相同的高度 item text padding 30px important Flex center display flex align items center
  • 获取文件的扩展名而不在路径中提供扩展名

    当您指定除扩展名之外的整个路径时 是否可以获得文件的扩展名 例如 C Users Administrator Pictures BlueHillsTest Thanks Directory GetFiles http msdn micros
  • Selenium 2 和 JUnit4:如何捕获异常屏幕截图?

    我只想在意外异常时捕获屏幕截图 Note This answer could be outdated The answer is based on Selenium 2 15 Using 测试观察者 http kentbeck github