目录
一、代码实现在windows下有界面执行,在linux下无界面执行
二、在linux环境下安装chrome、chromedriver、selenium
备注:最好的执行是jenkins+selenium grid插件,目前还不清楚jenkins的grid node如何配置……后续有时间再继续!!!
木文档主要记录关于web自动化python脚本在linux的无界面环境下的执行。但一般函数尽量不要静默执行,自测静默执行用例的失败率会提高,目前没有寻找到解决方式。
一、代码实现在windows下有界面执行,在linux下无界面执行
以下系简单的sample:
from selenium import webdriver
import sys
def is_driver(no_ui=False):
'''
1、判断是在什么环境下运行
2、no_ui win系统下默认为界面模式,无界面设为:True
'''
if 'linux' in sys.platform:
option = webdriver.ChromeOptions()
option.add_argument('headless') # 浏览器不提供可视化页面
option.add_argument('no-sandbox') # 以最高权限运行
option.add_argument('--start-maximized') # 最大化运行(全屏窗口)设置元素定位比较准确
option.add_argument('--disable-gpu') # 谷歌文档提到需要加上这个属性来规避bug
# option.add_argument('--window-size=1920,1080') # 设置浏览器分辨率(窗口大小)
driver = webdriver.Chrome(options=option)
else:
if no_ui:
''' win系统下无界面模式 '''
option = webdriver.ChromeOptions()
option.add_argument('headless') # 浏览器不提供可视化页面
option.add_argument('--start-maximized') # 最大化运行(全屏窗口)设置元素定位比较准确
driver = webdriver.Chrome(chrome_options=option)
else:
driver = webdriver.Chrome()
driver.maximize_window() # 将浏览器最大化
return driver
if __name__ == '__main__':
driver = is_driver()
driver.get('https://www.baidu.com/')
print('title:', driver.title)
print('执行完毕:!!!')
driver.quit()
二、在linux环境下安装chrome、chromedriver、selenium
2.1 安装chrome
远程连接linux,mkdir创建一个目录,下载chrome;安装脚本会自动下载、安装chrome(合适的版本),并且目前两个系统中,所缺少的依赖,都会被安装
wget https://intoli.com/install-google-chrome.sh
然后授予可执行权限
chmod 755 ./install-google-chrome.sh
执行脚本
./install-google-chrome.sh
测试安装结果
google-chrome-stable --no-sandbox --headless --disable-gpu --screenshot https://www.baidu.com/
如果出现.表示安装成功!
查看linux 安装的谷歌浏览器版本
google-chrome --version
2.2 安装chromedriver
安装chromedriver一定要注意与chrome的大版本对应
在win上浏览器中访问https://npm.taobao.org/mirrors/chromedriver中找到对应版本的chromedriver,进入对应版本,复制下载链接;
wget https://npm.taobao.org/mirrors/chromedriver/75.0.3770.90/chromedriver_linux64.zip
解压后,将chromedriver复制到:usr/bin
cp chromedriver /usr/bin
修改其权限
chmod +x chromedriver
2.3 安装selenium
yum install Xvfb
pip install pyvirtualdisplay
pip install selenium
安装完成之后,可以使用最上面第一点的代码运行,测试环境是否ok!
三、代码Retry机制的实现
python unittest 失败用例重跑实现方式示例_冷凝娇的博客-优快云博客_unittest用例失败重跑
四、jenkins部署
一般项目的部署配置,这里就用不着讲述了,下面的内容记录一下关于selenium grid+jenkins实现分布式构建的部署(备注:目前可以实现hub部署;但是node的部署还没走通,先记录一部分,后续有时间研究通了再记录。)
webUI实现分布式执行,jenkins提供了插件支撑,下载selenium插件
4.1 安装插件步骤
jenkins进入:系统管理-插件管理-高级,上传,重启jenkins即可。【jenkins需要管理员账号】
4.2 配置selenium grid hub
重启后,这样selenium grid hub 已经启动,首页会有个selenium grid菜单,如图:
点击Selenium Grid,进入配置信息,此时,服务器上的分布式hub已启动,可以用于每一个node的连接,实现hub控制node执行任务(目前node还配置不来,但是有暂行方式)
没有用jenkins配置node,可以在操作pc上执行(前提:本地执行机包含对应jar包):
1.命令提示符cmd,cd到本地计算机放置selenium-server-standalone-3.9.1.jar的文件夹
2.执行:
java -jar selenium-server-standalone-3.9.1.jar -role node -port 5555 -hub http://xxx.xx.xx.x:4444/grid/register
#备注:http://xxx.xx.xx.x:4444/grid/register 中x是hub的ip地址,一定要注意是ip,而不是0.0.0.0;即便你hub设置了0.0.0.0,只是表示你主机运行所以ip访问,port也可自己配置;
2.1.指定chromedriver.exe
全命令:java -Dwebdriver.chrome.driver="D:\env\selenium-grid\chromedriver.exe" -jar selenium-server-standalone-3.9.1.jar -role node -hub http://xxx.xx.xx.x:4444/grid/register
2.2.指定firefox
java -jar selenium-server-standalone-3.9.1.jar -role node -port 5555 -hub http://192.168.0.245:4444/grid/register -maxSession 5 -browser browserName=firefox,seleniumProtocol=WebDriver,maxInstances=5,platform=WINDOWS,version=83.0