一、背景:
    Selenium是一个web自动化测试框架,也支持从HTML页面上爬取javascript生成的或AJAX的内容。
    selenium2支持通过各种driver(FirfoxDriver、IternetExplorerDriver、OperaDriver、ChromeDriver)驱动真实浏览器完成测试的。
    selenium也是支持无界面浏览器操作的,如集成HtmlUnit和PhantomJs,不是真正的浏览器,运行时不会渲染页面显示内容,但是支持页面元素查找、动态js执行等;由于不进行css和gui渲染,运行效率要比真实的浏览器快。
    
    现在的问题是在windows+eclipse环境下java开发(通过driver驱动的)的程序如何部署到命令行centos下运行selenium呢?

二、选型:
   对selenium2支持浏览器driver、htmlunit、phantomJs三种进行比较:

1)selenium2集成htmlUnit
    htmlUnit是java实现的类浏览器程序,包含在selenium server中,无须驱动,直接实例化就行。
   用法如下:
   WebDriver driver = new HtmlUnitDriver();//
   WebDriver driver = new HtmlUnitDriver(true);//支持js
   htmlUnit速度快,但对js支持不是很好,适合相对静态的页面爬取。

2)selenium2集成phantomJs
   速度一般、模拟行为接近真实,但不能模拟不同/特定浏览器的行为,如鼠标点击操作,适合非GUI功能性自动测试。
   使用phantomJS配合selenium,可以创建无界面的浏览器。
   但发现似乎只支持Python语言,Java语言没有phantomJs实例,只能放弃。

3)真实浏览器driver
   可真实模拟用户行为,但效率、稳定性低,但支持特定浏览器行为,适合GUI功能测试。
   
   笔者在开发情况,是选择真实浏览器驱动,支持的比较完整,但要部署到命令行centos下时就需要找解决方案了。  
   Headless Selenium支持在服务器上运行的健壮的自动化操作,不需要显示设备。
   笔者计划在命令行centos下采用Headless Selenium方案,用Xvfb创建虚拟的X窗口。

三、设置centos代理服务器联网:
   1)全局设置:
      #vi /etc/profile
      export http_proxy=yourproxy:port
      export ftp_proxy=yourproxy:port
   2)单独yum的代理设置修改/etc/yum.conf
   3)单独wget的代理设置修改/etc/wgetrc
   设置联网方便yum安装一些组件。

四、centos下部署phantomJS+selenium 
   实际生产中没有选择该方案,这里给出,只是做参考。
   1、安装PhantomJS:
   1)hantomJS 是一个基于WebKit的服务器端 JavaScript API。它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。PhantomJS可以用于页面自动化,网络监测,网页截屏,以及无界面测试等。
   2)安装包下载地址:http://phantomjs.org/download.html,包括Windows,Mac OS,Linux版本,自行选择对应 版本下载解压即可(为方便使用,可自已为phantomjs设置环境变量),其中带有一个example文件夹,里面有很多已经写好的代码供使用。
   3)下载 phantomjs-2.1.1-linux-x86_64.tar.bz2 (22.3 MB) 并解压;
       #tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
       #cd phantomjs-2.1.1-linux-x86_64/bin
       进入bin文件夹执行测试
   4)测试:
      —新建文本文件hw.js,输入下面:
         #vi hw.js
         console.log('Hello, world!');
         phantom.exit();
      —执行
        # ./phantomjs hw.js
        提示:/lib64/libz.so.1: no version information available
        更新zlib版本:
        #wget http://zlib.net/zlib-1.2.8.tar.gz
        #tar zxvf zlib-1.2.8.tar.gz
        #cd zlib-1.2.8
        # ./configure
        #make
        #make install
        覆盖原版本,可以先备份一下原版本
        #cp /usr/local/lib/libz.so.1 /lib64/    
   5)建立软链:
        #ln -s /tmp/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs 
       命令行下直接使用phantomjs命令,不需要进入bin目录下执行。
   6)参考http://www.phperz.com/article/14/1115/35197.html

2、安装pip:
   1)查看和升级python版本:
     #python -V   是Python 2.6.6
     升级python版本
     #wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
     #tar -xf Python-3.5.2.tgz
     #cd Python-3.5.2
     #./configure
     #make
     #make install
     #ln -s /usr/local/bin/python3.5.2 /usr/bin/python
   2)下载get-pip.py
     https://bootstrap.pypa.io/get-pip.py
   3)安装pip:
     #python get-pip.py

3、安装selenium
   1)pip安装:
     #pip install -U selenium
   现在可以执行Python代码实例化webdriver.PhantomJS('phantomjs')爬虫程序。

五、centos下部署Headless Selenium
    实际生产中选择了该方案,用Xvfb创建虚拟的X窗口,模拟运行浏览器。
    Xvfb是一个实现了X11显示服务协议的显示服务器。 不同于其他显示服务器,Xvfb在内存中执行所有的图形操作,不需要借助任何显示设备。
   1、安装chrome浏览器:
      chrome对centos6不够支持,需要安装很多组件,升级至centos7。
      #yum install google-chrome-stable 
      网上有很多说明配置yum源的,可以参考。
   2、安装Xvfb
      #yum install Xvfb
      #yum -y install libXfont
      #yum install xorg-x11-fonts*
   3、启动Xvfb和浏览器
      #Xvfb -ac:7 -screen 0 1280x1024x8
      启动 chrome
           export  DISPLAY=:7 (和上一步的number号相同)
           chrome www.baidu.com
    由于服务器限制,没有成功部署到,这里先记录做参考。

六、移植程序
    将eclipse下的Java工程打包成jar,提交centos下java -jar执行,在启动浏览器和Xvfb情况下执行。

参考代码:

 package com.test;import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;public class headless {public static void main(String[] args) {System.getProperties().setProperty("webdriver.chrome.driver","/tmp/chromedriver.exe");    WebDriver webDriver = new ChromeDriver();webDriver.get("http://www.baidu.com");//访问网址System.out.println(webDriver.getTitle());webDriver.close();webDriver.quit();}
}

七、总结:了解到selenium框架,并选定Xvfb来虚拟GUI实现centos下运行selenium,当然如果采用python语言可以选择PhantomJS。
           在部署过程中,由于联网环境限制,yum源无法更新也无法安装,因此只能作为参考先记录。
           后续在实际生产中,需要验证:
    1)centos7+chrome+Xvfb部署,验证是否可以在命令行下启动浏览器;
    2)chromedriver_x64.exe驱动是否需要在代码显示加载;
    3)在前面两个都满足情况下,是否可以运行selenium;

模拟浏览器自动化测试工具Selenium之五Centos系统命令行下部署selenium环境试验相关推荐

  1. 模拟浏览器自动化测试工具Selenium之一eclipse集成开发部署篇

    1.背景:在网页自动化测试和网页表单自动交互的场景中,对动态js页面的加载,隐藏链接爬虫和表单元素需要加载js来解析. htmlunit相比较于htmlparser以及httpclient只能解析静态 ...

  2. 模拟浏览器自动化测试工具Selenium之三页面窗口切换开发篇

    不同网站有不同特性,需要掌握selenim基本网页元素定位以及浏览器控制,本文解析网页主要实现以下操作: 1)模拟鼠标操作,点击按钮提交:2)获取浏览器窗口句柄,切换到当前窗口下操作:3)处理不带总页 ...

  3. 模拟浏览器自动化测试工具Selenium之二Html基本元素开发篇

    发现用IE浏览器,有很多动态网站加载错误,只好安装chrome浏览器,然后下载chrome driver来驱动.通过selenium的基本元素定位操作来和网页交互. 网页解析主要动作:1)表单自动填写 ...

  4. 模拟浏览器自动化测试工具Selenium之四cssSelector元素定位开发篇

    Selenium官网的Document里推荐使用CSS locator,而不是XPath来定位元素,原因是CSS locator比XPath locator速度快,特别是在IE下面(IE没有自己的XP ...

  5. 模拟浏览器自动化测试工具Selenium之七采集网页信息写入excel

    功能:从网页上采集信息写入excel,有鼠标移动到相关元素代码,参考如下: package com.test;import java.io.DataInputStream; import java.i ...

  6. 模拟浏览器自动化测试工具Selenium之六设置代理篇

    在使用Selenium自动化测试时,如果需要设置代理访问网络时,可以参考如下代码: package com.test;import java.util.List; import org.openqa. ...

  7. Selenium浏览器自动化测试工具

    目录 Selenium浏览器自动化测试工具 Selenium模块在爬虫中的使用 Python简单使用Selenium Selenium的基本操作 Selenium爬取动态加载的数据 Selenium动 ...

  8. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...

  9. lxd linux系统视频教程,使用snap在CentOS 7系统下部署LXD的方法

    本文向你展示在CentOS 7服务器/系统桌面下安装和使用LXD的简单方法. LXD的特点 如下是LXD的最大特色: 设计安全(无特权的容器,资源限制等) 可扩展(来自数千个计算节点上的容器) 直观( ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第2期)
  2. 对ajax回调函数的研究
  3. JavaScript多态
  4. 蓝牙BLE ATT剖析(二)-- PDU
  5. 数据库的辅助工具:My-SqlViewer
  6. ORM(手写简单ORM)
  7. The 10th Shandong Provincial Collegiate Programming Contest 2019山东省赛游记+解题报告
  8. 层次狄利克雷过程HDP(Hierarchical Dirichlet Processes)
  9. linux常用命令示例
  10. 用批处理的方式解压文件
  11. PHP下载文件的正确方式
  12. popos ubuntu20升级更新AMD显卡GPU驱动
  13. 100万量子比特,PsiQuantum要怎样实现?
  14. R语言基于库克距离统计量识别(Cook’s distance)对于回归模型性能或者预测影响(Influential observation)很大的观测样本、可视化库克距离并添加阈值线识别影响力大的样本
  15. java单例模式_无名小仙男
  16. 路飞学城出品python全栈工程师学习感受
  17. Mac使用技巧 - 取词翻译
  18. DDD 实战 (5):战略设计之上下文映射和系统分层架构
  19. html窗口载入完成时间,如何记录页面加载时间
  20. 瑞芯微RK3399嵌入式开发板Wifi 驱动 build in 方式

热门文章

  1. tomcat war java_java – 启动Tomcat WAR
  2. 江苏有线门户网站服务器地址,江苏有线手机客户端的登录服务器
  3. 僵尸进程的产生与处理
  4. [NOI2007] 货币兑换 解题报告
  5. 06.正则表达式基本知识
  6. C语言复习:指针知识
  7. 从输入url到显示网页,后台发生了什么?
  8. 2735:八进制到十进制-poj
  9. 邮件Web客户端相关
  10. flash与IPhone