使用 selenium 进行测试,novnc + chrome + webdriver 的方案,可用于集成测试,也可用于之前老版本的 chrome 兼容测试的替代方案:VNC 控制 Docker Chrome

docker

# 启动最新版本的 selenium
# 7900 为 novnc 端口,4444 为 selenium 端口
$ docker run -it --rm -p 7900:7900 -p 4444:4444 --name chrome selenium/standalone-chrome


# novnc 查看
$ open http://localhost:7900/?autoconnect=1&resize=scale&password=secret

脚本

新建 index.mjs 如下:

import webdriver from 'selenium-webdriver';

const { By, Key } = webdriver;
!(async () => {
  let driver = await new webdriver.Builder();
  driver.forBrowser(webdriver.Browser.CHROME);
  driver.usingServer('http://localhost:4444');
  driver = driver.build();

  try {
    await driver.get('https://www.baidu.com');

    await driver
      .findElement(By.id('kw'))
      .sendKeys('webdriver 你好', Key.RETURN);

    let title = await driver.getTitle();
    console.log(title);
  } catch (err) {
    console.error(err);
  } finally {
    await driver.quit();
  }
})();

手动启动

# host
$ docker exec -it xxx-container-id bash

# docker
$ cd /usr/bin
$ ./google-chrome-stable

后续

  • novnc 对中文输入法支持不够,可能的解法有:
    • 1、可能需要安装 linux 特定输入法
    • 2、剪贴板支持中文
    • 3、通过外部类似 puppeteer 来控制输入
    • 4、最快速的方式,目前是通过 base64 来传递:https://base64.us/
  • selenium 的 chrome 版本貌似不怎么全