首先说一下背景,在项目中使用windows执行机进行rfs脚本运行时,遇到两个问题:

  1、Jenkins的多个slave节点和master的连接通过windows插件去建立,如果出现slave断连,无法自动恢复连接且无法及时得到告警;

  2、Windows经常因为系统更新或者运行依赖的软件、浏览器等使得环境变化导致脚本运行失败且中断,虽然有些更新可以通过设置去关闭,但还是会莫名其妙出现自动更新,或者有些提示窗口影响浏览器运行;

因此思考是否可以使用linux执行机来跑呢?经过多次尝试,的确可以实现,不过各有其优缺点,文章后面会简单总结。

以下是所需环境的搭建步骤:

1、安装xvfb

因现有资源限制,使用的linux虚拟机都是服务器版,无可视化界面;因此安装一个可以提供浏览器运行的虚拟环境,即xvfb。

经过多次尝试,最终选定了Ubuntu14.04以及Ubuntu16.04,这两个版本亲测可用,安装方法如下:

apt-get install xvfb

2、安装python

一般情况下,ubuntu自带python2.7,可直接使用。

3、安装rfs环境

方法一,在线安装,使用如下命令即可

apt-get install robotframework-selenium2Library

或者使用 pip install robotframework-selenium2Library

系统会根据源自动安装最新版本的依赖包:selenium,robotframework,decorator。

方法二,使用安装包安装:

依次下载版本配套的selenium,robotframework,decorator,robotframework-selenium2Library;然后逐个解压并使用python setup.py **安装。

4、在Selenium2Library中新增关键字

因xvfb需要在运行浏览器之前启动,而启动方法默认的Selenium2Library库中是没有的,我们先自定义两个关键字用来启动和关闭xvfb;只要在Selenium2Library原有关键字中添加以下代码即可:

from pyvirtualdisplay import Display;

def Start_Virtual_Display(self):

  self.display = Display(visible=0, size=(1680,1050))

  self.display.start()

def Stop_Virtual_Display(self):

  self.display.stop()

5、根据selenium版本安装firefox以及对应版本的驱动geckodriver

此步简单,跳过

至此,运行脚本的环境应该OK了,我们简单写一个脚本测试一下:

Run Keyword If    '${IsVirtualDisplay}' == 'YES'    Start Virtual Display

Open Browser    https://www.baidu.com    firefox

Close All Browsers

Run Keyword If    '${IsVirtualDisplay}' == 'YES'    Stop Virtual Display

以上脚本写入test.txt文件里,使用以下命令执行:

pybot -v IsVirtualDisplay:YES ../test.txt

运行开始以后会打出日志以及运行结果,PASS即为成功,失败会有截图。

经一段时间使用,发现完全可以解决上面遇到的两个问题,但是同时也有同事反馈:

1、执行失败时无法通过观察浏览器动作去定位问题;

2、部分元素操作结果和windows不一致,可能原因有很多种,还需深入研究。

如何使用linux+xvfb+python+rfs+firefox+jenkins实现UI自动化的更多相关文章

  1. Python结合Pywinauto 进行 Windows UI 自动化

    转:Python结合Pywinauto 进行 Windows UI 自动化 https://blog.csdn.net/z_johnny/article/details/52778064 说明:Pyw ...

  2. [python]RobotFramework自定义库实现UI自动化

    1.安装教程 环境搭建不多说,网上资料一大堆,可参考https://www.cnblogs.com/puresoul/p/3854963.html,写的比较详细,值得推荐.目前python3是不支持r ...

  3. python(pytest)+allure+jenkins 实现接口自动化的思路

    效果图镇楼: 上述各模块作用: python(pytest): 1:用于读测试用例(本次用例写在csv文件中) 2:环境配置相关 3:提取1中的测试数据,组成请求体 4:发送请求 5:获取结果 6:断 ...

  4. Jenkins下构建UI自动化之初体验

    一.缘 起 笔者之前一直在Windows环境下编写UI自动化测试脚本,近日在看<京东系统质量保障技术实战>一书中,萌生出在jenkins下构建UI自动化测试的想法 二.思 路 首先,在Li ...

  5. Python UI自动化

    Python3--Uiautomator2--Pytest--Alure使用 官方源码GitHub地址:https://github.com/openatx/uiautomator2 介绍 uiaut ...

  6. java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)

    java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...

  7. linux下python相关命令

    若本机已安装python2,尽量不要动现有的python2,额外安装python3即可. 1.安装python3.6(centos下安装python3自带pip和setuptools) python3 ...

  8. 测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)

    本文为霍格沃兹测试学院学员学习笔记. 本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的.网络搜集(完善).工作日常讨论等,分为以下十个部分,供大家参考.如有错误的地方,欢迎 ...

  9. Linux下Python 文件内容替换脚本

    Linux下Python 文件替换脚本 import sys,os if len(sys.argv)<=4: old_text,new_text = sys.argv[1],sys.argv[2 ...

随机推荐

  1. springboot整合mybatics PLUS

    首先添加maven依赖: <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactI ...

  2. stand up

    #version_s#1.7#version_e# #update_s#https://files.cnblogs.com/files/dyh221/update.zip#update_e#

  3. excel2013 打开为灰色空白 左下角显示就绪 要把文件拖进去才能打开!

    最近电脑excel2013 打开总是为灰色空白 左下角显示就绪 要把文件拖进去或者在此再打开一个才能打开! 在网上搜了一下,我是使用下面这个方法解决的: 步骤一:请您在“开始”菜单的搜索框中输入“re ...

  4. SDN 软件定义网络----学习1

    原文地址https://www.infoq.cn/article/sdn-and-cloud-network 1.1,什么是 SDN? 什么是 SDN?SDN 的官方解释上提出了 SDN 的三个特性: ...

  5. Linux命令 ls 和 ll 的使用方法与基本区别

    Linux 命令 ls 和 ll 的使用方法: ll:罗列出当前文件或目录的详细信息,含有时间.读写权限.大小.时间等信息 ,像Windows显示的详细信息.ll是“ls -l"的别名.相当 ...

  6. sql注入练习,sqli-labs writeup

    一.Less-1 1.判断是否存在注入 URL中输入“?id=1”,发现回显有变化,说明存在注入: 2.判断闭合字符,注释后面的内容 输入“   ?id=1'  ”,回显为  "1" ...

  7. 【Python】*args和**kwargs的区别

    1.*args表示将参数作为元组传给函数 通过一个函数的定义来理解’*args’的含义 修改函数的定义: >>> def fun(*args): ... print args ... ...

  8. matlab批量读取一个文件夹里类似命名的mat文件

    参考网址: Matlab读取同一路径下多个txt或mat文件总结 matlab 批量读取数据文件.mat .dat 整理:matlab批量读入数据文件的方法 首先命名方式体现在只是名字里数字有变化,其 ...

  9. 浅谈在java中list集合的排序问题

    定义实体类: public class Person { private Integer id; private String name; private Integer age; public In ...

  10. edfread源码

    function [hdr, record] = edfread(fname, varargin) % Read European Data Format file into MATLAB % % [ ...