我正在使用黄瓜量角器框架来运行功能文件。
在我的config.js中,我有:
specs: [
"../../features/XXX1.feature",
"../../features/XXX2.feature",
...
"../../features/XXXn.feature",
],
cucumberOpts: {
tags: "@mytag",
},
在我的功能文件XXX1.feature中,我有一个标签"@mytag"集:
@mytag
Scenario Outline: my Flow
Given I am running test case one
....
但不在任何其他功能文件中,如XXX2.feature、XXX3.feature等
我希望量角器只运行XXX1.feature,而不运行XXX2.feature。它确实这样做了,当涉及到XXX2.feation时,它启动浏览器,什么都不做,然后输出以下内容:
[14:35:53] I/testLogger - [chrome #01-2] PID: 14272
[chrome #01-2] Specs: D:ptfbcuifeaturesXXX2.feature
[chrome #01-2]
[chrome #01-2] [14:35:44] I/hosted - Using the selenium server at http://127.0.0.1:4444/wd/hub
[chrome #01-2]
[chrome #01-2]
[chrome #01-2] 0 scenarios
[chrome #01-2] 0 steps
[chrome #01-2] 0m00.000s
但它仍然不够好。既然在XXX2.feature中没有标记"@mytag"。难道它不应该跳过功能文件XXX2.feation而根本不启动浏览器吗?
为每个没有"@mytag"的不合格要素文件启动浏览器也很耗时。
有没有一种配置方法可以避免这种情况?
编辑
能力和挂钩.ts
capabilities: {
browserName: "chrome",
shardTestFiles: true,
maxInstances: 1,
'chromeOptions': {
'args': [
'disable-infobars'//,'headless=true','disable-gpu=true',
],
'prefs': {
'credentials_enable_service': false,
'download': {
'prompt_for_download': false,
'directory_upgrade': true,
}
}
}
},
const { BeforeAll, After, Status } = require("cucumber");
import * as fs from "fs";
import { browser } from "protractor";
import { config } from "../config/config";
BeforeAll({timeout: 300 * 1000}, async () => {
await browser.get(config.baseUrl);
});
After(async function(scenario) {
// screenShot is a base-64 encoded PNG
const screenShot = await browser.takeScreenshot();
this.attach(screenShot, "image/png");
});
对于Protractor执行功能文件的过程,它可以分为两个阶段。
Protractor打开每个要素文件的浏览器实例(创建会话(作为第一阶段,然后Protractor将运行任务移交给cucumber作为第二阶段。
在第二阶段,cucumber将检测特征文件是否满足标记。否则,cucumber将不会为特性文件运行任何场景,您将在控制台中获得0 scenarios, 0 steps
。
否则,黄瓜将执行那些满足特性文件中标记的场景。
因为Protractor不负责在打开浏览器之前检测特征文件是否满足标记,因此正如您所看到的a browser opened and closed without any operation
。
唯一的解决方案是在Protractor conf.js中给出满足标签的精确specs
。为了做到这一点,您需要根据标记过滤特征文件,然后将过滤结果指定给specs
。
我在github 做了一个规格过滤器
// general config.js
exports.config = {
specs:[
'./features/**/*.feature'
],
cucubmerOpts: {
tags: '@abc'
}
};
// conf.js use my filter
var config = {
specs:[
'./features/**/*.feature'
],
cucubmerOpts: {
tags: '@abc'
}
};
exports.config = require('./spec.filter.js').filter_by_tag(config);
我遇到了完全相同的问题,在删除后问题得到了解决
shardTestFiles: true
您犯了一个小错误,将其更改为Before而不是beforeAll。
确保你有一个给定的小黄瓜,这样每个场景都可以导航到主页或url。
Given I am navigating to homepage
这将有你的browser.navigate(url)