下面的演示中以 Selenium-WebDriver 和 Chrome 作为配置对象,但是各个浏览器(Chrome、FireFox、IE/Edge)的配置选项都是总体上相同的,因此文章中的方法也是同样适用的。
在使用 Selenium 进行自动化时,需要根据不同的浏览器选择各自的驱动,也叫 WebDriver。出于性能方面的考虑,WebDriver 启动的浏览器(这里以 Chrome 为例)是一个纯净的、不带扩展的浏览器实例。而我们常常会对浏览器有些特殊的需求,就需要对 WebDriver 添加启动参数。
本篇文章的主要包含以下内容:
Chrome 的配置项及其在 Selenium-WebDriver 中的配置方法
为 Web 自动化配置专用的 Chrome 环境的方案
Chrome 配置项的配置方法
在 Selenium 的其它语言实现,比如 Java、Python 中,Chrome 配置由类控制,但在 JavaScript 中,使用的是中的类,具体的实现如下:
使用 Option 添加配置
首先如果是没有配置启动参数时 WebDriver 的写法:
而假设我们需要 Chrome 以最大化的状态启动,需要添加启动参数。使用方法添加参数。
接着可能还想隐身模式启动浏览器,这就要使用启动参数,在实例化前给加上这一条参数即可:
常用配置项
Chrome 的配置项非常多,添加启动参数属于比较简单的配置,另外还可以配置浏览器的功能和偏好(Preference)、可执行文件路径、代理等。
常用启动参数
可以配置的启动参数非常多,完整版的可以访问此网站[1]。但是这里我们只列举常用的一些参数。
禁用 “Chrome 受到自动测试程序控制” 提示的参数由于被恶意滥用在某次 Chrome 更新中[2]中移除了。
添加扩展
使用方法给浏览器增加扩展程序,为扩展程序的文件的路径。在浏览器启动时会自动安装添加的扩展。
为 Web 自动化配置一套 Chrome 环境
在用 Selenium 写 Web 自动化时,可能会因为 WebDriver 每次都是重启一个全新的干净浏览器而烦恼,可能会导致每次在业务测试脚本开始前先执行一大段配置脚本(比如登录、注册等等)。而如果让 WebDriver 不要每次都启动一个干净的浏览器而是启动一个跟平时使用没有区别、带用户数据的浏览器,就可以在执行业务测试之前,先准备好 cookie 或者保持住登录状态,来避免反复的配置操作。
下面介绍如何让 WebDriver 使用用户数据。
直接使用默认用户启动浏览器
事实上,在常用启动参数一节我们在第一行就介绍了配置用户数据的参数,即,只要指定到 Chrome 安装目录下的文件夹,即可打开平时使用的那一套浏览器。添加配置的代码如下:
接着启动 WebDriver 即可看到一套熟悉的、与平时使用一样的浏览器启动。当然更多时候你只会看到一串报错如下:
报错提示后台已经有一个浏览器实例正在使用该用户数据文件夹,这会导致读写冲突。但这其实只是因为你已经开了一个浏览器,而两个浏览器实例使用了同一个用户数据文件夹;或者后台仍有相关的进程在使用该用户数据(Chrome 为了保证运行速度会在后台保持浏览器扩展,而扩展使用了用户数据)。因此可能需要用将这些进程结束掉,才能成功启动,这非常的麻烦,当然下面提供了另外一种方案,可以比较好的解决这个问题。
使用新的用户启动浏览器
在上一节中,报错的原因是因为有另一个实例占用了用户数据文件夹,因此我们只要另起一个用户数据文件夹——也就是新建一个浏览器用户,具体的方法如下:
新增用户
这个时候可以再访问原来的用户数据文件夹,即,可以看到目录下出现了新的名为的文件夹(数字具体是几取决于你创建过几个账号)。
使用新增的用户数据文件夹
我们将 WebDriver 启动的数据文件夹改到新增的用户数据路径,即,接着启动就可以看到打开了一个新的浏览器。
但是你一定注意到了,这里右上角“个人资料”仍然是空的,而不是刚刚新增用户的时候设定的头像。这是因为 Chrome 在从命令行第一次启动的时候,会自动的在当前的用户数据文件夹下创建文件夹并使用,因此使用的仍然会是一个空的用户。所幸这并不影响 WebDriver 保存用户数据。
可以在地址栏中访问chrome://version[3]查看,个人资料路径一栏的路径为。
这时你也会发现浏览器在启动后、执行操作前的停留时间变长了,这是因为浏览器是先打开再加载用户数据的,因此会比较费时。也是因为这个原因 WebDriver 每次都打开的是纯净的浏览器来保证运行速度。
检查是否能保存浏览数据
接着便可以让 WebDriver 正常使用用户数据了,可以访问GitHub[4]把自己的账号登录上去,接着之后再打开就都可以看到保持登录在登录中状态了。
这个办法也可以有效的隔离用户数据,以 Github 举例,你可能有个自己的账号,但还有另外一个测试账号。在原来的情况,可能需要经常在 Github 上切换账号,但是现在就不需要了,两个账号的登录状态保存在不同的用户数据文件夹中,不会产生任何冲突。
如何手动打开新增的用户浏览器
在 Chrome 中新增用户后,桌面上出现了启动不同用户的 Chrome 快捷方式。研究这些快捷方式以后就能注意到,启动特定用户 Chrome 的命令就是在加上后缀的配置项:
而 WebDriver 刚刚启动的其实是下新创建的用户,因此我们将命令改为
即可。当然也可以直接在快捷方式里面把改成上面这个命令。
明白了运行命令的原理,你甚至可以将这个命令写成文件来运行浏览器,当然,这不美观,也没必要。
总结
以上就是针对 Web 自动化中提高效率的一个技巧,通过配置一个专用的浏览器环境,来避免 Web 自动化前进行的一系列环境配置操作,从而大幅度的提高 Web 自动化的效率,以及多个项目运行环境之间的协调。
参考资料[1]
此网站:https://peter.sh/experiments/chromium-command-line-switches/
[2]
某次 Chrome 更新中:https://chromium.googlesource.com/chromium/src/+/d869ab3350d8ebd95222b4a47adf87ce3d3214b1
[3]
chrome://version:chrome://version
[4]
GitHub:https://www.github.com
领取专属 10元无门槛券
私享最新 技术干货