有段时间没更新UI自动化内容了,最近公司的测试进度逐步进入正轨,业务测试也需要更强的自动化脚本来支撑,所以又需要准备接入UI自动化来进行一些内容的测试。
这次想玩点不一样的,部署远程Selenium服务。
从Selenium的源码中可以很轻松的获知它是支持远程调试的,只需要启动WebDriver服务时进行一些配置。
具体的配置方法这里就不细说了,只说实施过程中碰到的坑以及对应的解决方法。
1、WebDriver服务启动后提示 Only local connections are allowed.
这个是因为Chrome默认不允许跨机器调试,只需要给启动命令加上白名单即可。
具体参考文档点击这里
最后完整的启动命令如下:
chromedriver.exe --port=13800 --whitelisted-ips=""
启动成功后会提示:All remote connections are allowed. Use an allowlist instead!
告诉我们白名单列表不能是空的,这个我们还在调试阶段所以暂时不管。
2、外网访问端口已经打开,但是依旧报无法访问错误。
解决问题1之前,我已经打开了13800端口的外网访问权限,但是此时使用外网访问却始终超时,无法访问。
后来经过搭建最简服务器验证错误的方法发现,主要是阿里云的Windows服务器自身带了防火墙,服务被墙了。将防火墙关闭即可。
当然,将防火墙直接关闭是很危险的操作,可以在阿里云和服务器上同时将服务端口加入白名单即可。
设置好后,再次执行问题1里的命令,此时终于可以正常访问 /status
接口,获取到服务状态。
3、DevToolsActivePort file doesn't exist
正当我以为所有问题都解决了之后,启动Selenium准备做一个最简单的测试,却发现连接服务的速度特别慢,并且最终报了上面的错误。
调试之后,找到了出现错误的代码
self.start_session(capabilities, browser_profile)
是获取通信session时报的错误,经过一番Google,整合了多个帖子的内容后,终于找到解决办法
DevToolsActivePort file doesn't exist - ChromeDriver through Selenium on Ubuntu Server · Issue #6049 · SeleniumHQ/selenium · GitHub
selenium - WebDriverException: unknown error: DevToolsActivePort file doesn't exist while trying to initiate Chrome Browser - Stack Overflow
参考文档如上
最终需要使用如下启动WebDriver的命令
chromedriver.exe --port=13800 --whitelisted-ips="" --remote-debugging-port=13800--remote-debugging-port=13800 --enable-webgl --no-sandbox --disable-dev-shm-usage
启动服务后,再在本地启动Selenium代码,终于可以正常访问了。
小结
从开始到最终能够访问远端WebDriver服务,总共历时5个小时,2和3两个问题花了绝大部分时间,并且得到了开发大佬的鼎力协助,甚为感激。
远程部署只是UI自动化计划的开始,后续会持续更新所有的实施过程中的采坑记。