如何防止 Selenium Webdriver 打开 Firefox 的多个实例?

问题描述 投票:0回答:1

我正在 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 个实例。有人知道该怎么做吗?

javascript selenium-webdriver firefox cucumberjs
1个回答
0
投票

这是由于 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

© www.soinside.com 2019 - 2024. All rights reserved.