Protractor无障碍性报告

3
我在尝试使用Protractor自带的可访问性插件。据我所见,它检查了我所在页面的a11y。 有没有一种方法可以连续执行两个测试脚本并提供不同的报告,或将所有内容放入一个报告中但分开显示。
例如:
access.js
access1.js
输出文件:
resultJsonOutputFile: 'result/result.json'
我尝试在conf.js中这样做:
specs: ['../test/access.js', '../test/access1.js'],
or
specs: ['../test/access*.js'],

但仍然获得上一个脚本执行的结果

我也尝试创建测试套件:

suites: {
   homepage: '../test/homepage/access.js',
   catalogpage: '../test/catalogpage/access1.js'
  },

但是当我检查JSON文件时,如果执行了两个脚本,那么第一个脚本正常无误,而第二个脚本会出现错误。但是,如果只运行第一个脚本,Protractor会提供错误信息。

另外,我尝试将不同的场景创建在一个JS文件中,但仍然存在同样的问题。

4个回答

4

目前的实现中,可访问性插件被设置为在 Protractor 运行程序的每次调用中只运行一次,在最后一个页面上。因此,不幸的是,无论修改测试套件或测试文件都无法使其多次运行。

您可以为每组需要运行的测试文件创建单独的配置文件,或者使用 shardTestFiles 确保每个文件在其自己的进程中运行。有关分片的更多详细信息,请参见参考配置文档


3

另外,您可以使用aXe进行无障碍性测试。为了在protractor和Webdriver中使用它进行端到端测试,请执行以下操作:

npm install --save-dev axe-webdriverjs

在您的端到端测试文件中,您需要执行以下操作:
var AxeBuilder = require('path_to_the/axe-webdriverjs');

要获得AxeBuilder,然后无论您需要在哪里运行测试,您都可以:

AxeBuilder(browser.driver)
    .analyze(function (results) {
        expect(results.violations.length).toBe(0);
    });

以上示例使用了Jasmine,但你可以推广到任何其他断言库。
另外:这里有一个样例项目,你可以克隆并运行:https://github.com/dylanb/UITestingFramework 声明:我与aXe项目有关系,因此不是中立的。

这可以用Ruby/Rspec实现吗? - Vanatomas
这个repo/gem包含了R-Spec的基础知识 https://github.com/dequelabs/axe-matchers。你能在Protractor中使用R-Spec吗? - unobf
似乎我们将摆脱 Protractor,现在采用了 Cucumber/Rspec,我在思考是否可以使用它来代替 Protractor :) - Vanatomas
那个代码库应该能帮助你学习 R-Spec 和 Cucumber。 - unobf

2
我也遇到了这个问题 - 就像另一个帖子所说,该插件并不真正设计为以那种方式运行。
我编写了该插件的一个衍生版本,可以实现您要查找的功能 - protractor-axe-report-plugin
每当您在浏览器中打开要测试的页面时,只需调用runAxeTest(或runAxeTestWithSelector),它将使用aXe引擎生成报告。

1
但是在我安装了npm包并在配置文件中添加了插件后,在我的测试中出现了“找不到名称runAxeTest”的错误。我正在使用您的包:protractor-axe-report-plugin。 - Dinesh

0

Continuum 可以用于你的使用场景,因为它似乎可以解决 Protractor 自带的可访问性插件无法解决的问题。 这里有一些文档资料,介绍了一个基于 Protractor 的示例项目,它使用 Continuum 实现了可访问性测试功能。该示例项目可从 webaccessibility.com 的“Continuum for Protractor”页面下载。如果你查看该示例项目的源代码,你会发现它实际上只是简单地归结为以下内容:

const continuum = require('../js/Continuum.js').Continuum;
continuum.setUp(driver, "../js/AccessEngine.community.js");
continuum.runAllTests().then(() => {
    const accessibilityConcerns = continuum.getAccessibilityConcerns();
    // accessibilityConcerns.length will be 0 if no accessibility concerns are found
});

(如需了解更多信息,请查看API文档。)

您可以在测试中的任何位置执行continuum.runAllTests,如果需要的话,包括在同一次测试中多次执行该操作,如果我理解正确,这可能是您最终想要的。

当然,没有自动化无障碍测试工具可以替代手动无障碍测试。不过,似乎您现在只是想获取基本的符合性水平,所以Continuum似乎适合您的用例来解决低挂果子问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接