无界面浏览器实现自动化测试

前言

今天给兄弟们分享一个我在测试过程中遇到的实例,如何通过一套测试框架完美兼容linux和windows服务器以及过程中遇到问题的解决方案。
框架体系:selenium+pytest+jenkins+gitlab+python+linux/windows+docker
此篇幅主要介绍的web自动化,主要就是用的selenium,关于selenium的介绍和用法可以参考这边文章 selenium-python中文文档

关于无界面浏览器(Chrome)的介绍
什么是Headless Chrome

在这里插入图片描述

Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。相比于出道较早的 PhantomJS,SlimerJS 等,Headless Chrome 则更加贴近浏览器环境。

使用中的优势
无头浏览器比真正的浏览器更快

无头浏览器的一个明显的“优势”是它们通常比真正的浏览器更快;
原因在于您没有启动浏览器GUI,所以您可以绕过真正的浏览器加载CSS、JavaScript、打开和呈现HTML所花费的所有时间。
但我必须承认,这并不完全像白天黑夜简洁明了。但使用无头浏览器时,您通常会看到性能提高了2倍至15倍。
因此,如果性能对您至关重要,那么无头浏览器可能是一个不错的选择

利用无头浏览器爬网站数据

无头浏览器的另一个优点是,它们可以用来抓取网站。但是,要做到这一点,您不必手动启动一个网站。你可以不加思索地利用它,只抓取部分HTML。你不需要渲染一个完整的浏览器。
例如,你的工作需要研究统计一些体育数据,或比较不同网站之间的价格。
因为它只是您正在寻找的数据,所以没有必要启动一个完整的浏览器实例;这只是额外的开销-----有时候开销越少,返回结果的速度就越快。

启动参数
--headless	#在无头模式下运行,即没有UI或显示服务器依赖性。
--window-size	#设置初始窗口大小。提供格式为“800,600”的字符串。
--no-sandbox	#为通常为沙盒的所有进程类型禁用沙箱。
--ignore-certificate-errors	#忽略与证书相关的错误。
--disable-gpu	#禁用GPU硬件加速。如果软件渲染器不到位,则GPU进程将无法启动。

其他参数使用可以文章参数汇总

如何写一个webdriver的封装类

提供一个我自己写的关于driver的封装类

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

class MyDriver:
    _driver = None

    @classmethod
    def get_driver(cls, browser='chrome'):
        if cls._driver is None:
            options = Options()
            options.add_argument('headless')
            options.add_argument('window-size=1700x938')
            options.add_argument('no-sandbox')
            options.add_argument('ignore-certificate-errors')
            options.add_argument('disable-gpu')
            if browser.lower() == 'chrome':
                cls._driver = webdriver.Chrome(options=options)
            elif browser.lower() == 'firefox':
                cls._driver = webdriver.Firefox(options=options)
            elif browser.lower() == 'ie':
                cls._driver = webdriver.Ie(options=options)
            else:
                msg = f'找不到{browser}浏览器,请重试'
                raise msg
        cls._driver.implicitly_wait(5)
        # cls._driver.maximize_window()
        cls._driver.set_page_load_timeout(60)
        cls._driver.set_script_timeout(60)

        return cls._driver
如何安装浏览器和所需的插件

不知道如何去安装的小伙伴可以参考下面的文章:
安装Google Chrome浏览器和webdriver

使用过程中遇到的报错及解决方案
  1. UnknownError: session deleted because of page crash from tab crashed
    解决方案:扩容共享内存
    参考链接
    2.selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
    此报错前需保证原本是能正常运行的代码
    添加如下代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('window-size=1700x938')
driver = webdriver.Chrome(options=options)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值