我正在 Node.js 上使用 Selenium Webdriver 编写一些自动化测试。到目前为止,它们工作正常,但我有一个问题:每当我运行测试(仅 1 个测试)时,都会打开 4 个 Firefox 实例。测试将在其中一个 FF 窗口中运行并完成,但其他窗口将保持打开状态。
这与异步方法有关吗?
有人知道如何限制运行测试时打开的 FF 实例数量吗?
我的代码是这样的:
const { Then, Given, When, After } = require('@cucumber/cucumber');
const assert = require('assert');
const { Builder, By, until, Key } = require('selenium-webdriver');
const firefox = require('selenium-webdriver/firefox');
let options = new firefox.Options();
const driver = new Builder()
.forBrowser('firefox')
.setFirefoxOptions(options)
.build();
Given('I am on a page that needs to be tested', async function () {
driver.wait(until.elementLocated(By.tagName('h1')));
await driver.get('https://www.awebsite.com');
});
When('I do the thing', async function() {
//.....tests, etc
我在运行测试的控制台中得到的输出是:
Selenium Manager binary found at /me/automated-testing/node_modules/selenium-webdriver/bin/macos/selenium-manager
Driver path: /me/.cache/selenium/geckodriver/mac-arm64/0.34.0/geckodriver
Browser path: /Applications/Firefox.app/Contents/MacOS/firefox
Driver path: /me/.cache/selenium/geckodriver/mac-arm64/0.34.0/geckodriver
Browser path: /Applications/Firefox.app/Contents/MacOS/firefox
Driver path: /me/.cache/selenium/geckodriver/mac-arm64/0.34.0/geckodriver
Browser path: /Applications/Firefox.app/Contents/MacOS/firefox
Driver path: /me/.cache/selenium/geckodriver/mac-arm64/0.34.0/geckodriver
Browser path: /Applications/Firefox.app/Contents/MacOS/firefox
.....
1 scenario (1 passed)
3 steps (3 passed)
0m04.525s (executing steps: 0m04.517s)
如您所见,FireFox 打开了 4 次。我不确定如何限制这一点,因此只打开 1 个实例。有人知道该怎么做吗?
这是由于 Cucumber JS,而不是 Selenium。
Cucumber JS 将所有步骤文件合并为 1 个文件。因此,如果您有 4 个步骤文件,其中包含 4 个实例
const driver = new Builder()
.forBrowser('firefox')
.setFirefoxOptions(options)
.build();
这将运行 4 次,FireFox 将打开 4 次。
解决方法是将构建器放置在第一步中,例如:
Given('I am on the About page', async function () {
this.driver = new Builder()
.forBrowser('firefox')
.build();
this.driver.wait(until.elementLocated(By.tagName('h1')));
await this.driver.get('https://www.some-site.com/about');
});
请注意现在包含
this
。