You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04下使用selenium-webdriver测试时safaridriver报错求助

解决Ubuntu 20.04下Selenium测试报错Safari驱动无法下载的问题

问题原因

你已指定测试仅运行Chrome和Firefox,但Selenium 4+自带的Selenium Manager仍会尝试检测系统中所有可能的浏览器。由于Ubuntu系统不支持Safari,且Safari驱动仅适配macOS,导致驱动下载失败报错。

解决方案

方法1:设置环境变量忽略Safari检测

执行测试命令时添加SE_IGNORE_SAFARI=true环境变量,让Selenium Manager跳过Safari的检测与驱动下载:

SE_IGNORE_SAFARI=true npx mocha test/**/*.spec.cjs

若需长期生效,可将该变量添加到shell配置文件(如~/.bashrc或~/.zshrc):

echo "export SE_IGNORE_SAFARI=true" >> ~/.bashrc
source ~/.bashrc

方法2:升级selenium-webdriver到最新版本

部分旧版本的Selenium Manager存在逻辑bug,即使指定了测试浏览器仍会触发Safari检测。运行以下命令升级到最新稳定版:

yarn upgrade selenium-webdriver

方法3:手动指定Chrome/Firefox驱动路径(可选)

若不想依赖Selenium Manager自动管理驱动,可手动下载对应浏览器的驱动(ChromeDriver、GeckoDriver),并在代码中指定路径:

Chrome配置示例:

const { By, Builder, Browser } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const { suite } = require('selenium-webdriver/testing');
const assert = require("assert");

suite(function (env) {
  describe('First script', function () {
    let driver;

    before(async function () {
      driver = await new Builder()
        .forBrowser(Browser.CHROME)
        .setChromeService(new chrome.ServiceBuilder('/usr/local/bin/chromedriver').build()) // 替换为你的ChromeDriver实际路径
        .build();
    });

    after(async () => await driver.quit());

    it('First Selenium script', async function () {
      await driver.get('https://www.selenium.dev/selenium/web/web-form.html');

      let title = await driver.getTitle();
      assert.strictEqual("Web form", title);

      await driver.manage().setTimeouts({ implicit: 500 });

      let textBox = await driver.findElement(By.name('my-text'));
      let submitButton = await driver.findElement(By.css('button'));

      await textBox.sendKeys('Selenium');
      await submitButton.click();

      let message = await driver.findElement(By.id('message'));
      let value = await message.getText();
      assert.strictEqual("Received!", value);
    });
  });
}, { browsers: [Browser.CHROME, Browser.FIREFOX] });

Firefox配置示例:

const { By, Builder, Browser } = require('selenium-webdriver');
const firefox = require('selenium-webdriver/firefox');
const { suite } = require('selenium-webdriver/testing');
const assert = require("assert");

suite(function (env) {
  describe('First script', function () {
    let driver;

    before(async function () {
      driver = await new Builder()
        .forBrowser(Browser.FIREFOX)
        .setFirefoxService(new firefox.ServiceBuilder('/usr/local/bin/geckodriver').build()) // 替换为你的GeckoDriver实际路径
        .build();
    });

    after(async () => await driver.quit());

    it('First Selenium script', async function () {
      await driver.get('https://www.selenium.dev/selenium/web/web-form.html');

      let title = await driver.getTitle();
      assert.strictEqual("Web form", title);

      await driver.manage().setTimeouts({ implicit: 500 });

      let textBox = await driver.findElement(By.name('my-text'));
      let submitButton = await driver.findElement(By.css('button'));

      await textBox.sendKeys('Selenium');
      await submitButton.click();

      let message = await driver.findElement(By.id('message'));
      let value = await message.getText();
      assert.strictEqual("Received!", value);
    });
  });
}, { browsers: [Browser.CHROME, Browser.FIREFOX] });

内容的提问来源于stack exchange,提问作者mbourd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:14:55