TestNG+Selenium
- 是一个开源自动化测试框架。其实类似于JUnit这种单元测试框架,但进行了一些功能扩展
- 属于selenium?还是说TestNG是一个测试框架,它用到了selenium的web自动化测试的功能,比如使用浏览器对应的driver去进行操作,
- 不一定要由RobotFramework触发
- 参考
- 使用
- 可以使用多种语言,下面以java语言为例,使用Chrome+编写抓取页面的逻辑
- 流程
- 新建一个java项目,可以是gradle项目
- 新建测试类,使用testng提供的一些注解如@Test,打包成jar包待用(需要包含依赖的jar包,比如自定义gradle task创建完整的jar包)
- 貌似简单情况下有编译完的class文件即可?
- 新建一个testng的xml配置文件,其中可以指定测试类包全路径、一些文件路径、变量、执行测试类中的所有方法还是指定方法等。比如打开页面后要输入的账号密码等,java代码中可以使用。
- 如果xml中包含url之类的参数,如果其中有.等特殊字符,需要进行urlencode。如果有&等特殊字符,需要进行xml转义。
- 使用java命令触发执行测试方法
- 可以简单的使用java org.testng.TestNG testng.xml,其中第一个参数通常是固定的,表明使用testng执行测试;第二个参数是配置文件的名称
- 这里其实是默认了testng的jar包、测试脚本的jar包或class文件、xml配置文件都在执行命令的cmd当前目录下
- 比较复杂的情况下,如果这些文件不在同一目录下,可以使用java命令的-cp参数(其实就是-classpath参数)指定搜索testng的jar包、测试脚本的jar包的目录(可以多个,用:分隔,路径中可以使用*这种匹配符),xml配置文件可以直接在java命令中写上全路径
- 如C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
- 通常作为一个进程启动,脚本(比如.sh脚本)结束前要把这个进程杀掉。
- 可以简单的使用java org.testng.TestNG testng.xml,其中第一个参数通常是固定的,表明使用testng执行测试;第二个参数是配置文件的名称
- 如果是按分辨率抓取信息,那么通常在执行命令前要进行屏幕(浏览器?)分辨率的设置,即使java等语言的测试类代码中是根据页面元素id来抓取的
- 最好去selenium官网下载驱动,并且查看驱动、浏览器、selenium三者之间的版本对应关系,一定要对应上。
- 版本对应关系可以百度搜,也可以去官网提供的GitHub仓库里去看各个release的release note,如https://github.com/mozilla/geckodriver/releases。
- 不需要指定浏览器的目录,需要指定driver文件的路径(需要指定系统属性如:System.setProperty("webdriver.gecko.driver", "/mmm/SeleniumLib/geckodriver");)。
- selenium提供了需要操作页面元素的方法,比如getElement之类的
- 找到Element后,可以获取内容,可以填充文本,还可以调用click()方法去点击按钮
- 和scrapy类似,用的也是xpath去找的html元素,可以在火狐上装xpath的测试插件辅助开发
- 使用Selenium+chromedirver自动化操作Chrome
- Ubuntu上有可能出于版本等原因无法使用Selenium+chromedriver自动化操作Chrome
- 即使java代码中使用chromedriver启动Chrome时不使用AddParameter()添加--headless参数,也无法打开界面
- 有时需要在启动Chrome时传入一些参数关闭sandbox(可以在java等语言的测试类代码中使用chromedriver启动chrome时设置),才能正常使用。
- 使用Selenium+geckodriver自动化操作Firefox
- 脚本需要有足够的权限(比如root),否则即使直接运行Firefox命令都会报错,报错信息通常是Connection Refused、Can't open display: :0之类乱七八糟的错误。
- Firefox不像Chrome那样是通过参数自定义设置,而是通过Profile,每个Profile包含一系列用户的设置(是不是下面的代理弹窗问题,也可以使用Profile解决?虽然java代码中Profile类没有代理账号密码之类的字段,但是可以自己打开浏览器输入一次,然后导出profile,让selenium去读和使用?貌似没有设置账号密码的preference。。。。难道是signon.autologin.proxy!?)。
- 获取FirefoxProfile配置文件以及使用方法介绍:貌似%APPDATA%\Mozilla\Firefox\Profiles\prefs.js就是这个配置文件,内容都是user_pref("network.proxy.type", 1);这样的preference设置。也可以在火狐浏览器中地址栏输入about:config打开查看
- 这些Preference的设置也可以参考官方文档:http://kb.mozillazine.org/Network.proxy.type
- Selenium FF WebDriver 加载firebug 和设置代理
- 貌似selenium+geckodriver每次都是用了一个新的空的Profile,除非在代码中创建和设置一个新的FirefoxProfile,并且在初始化driver时传入,如profile.setPreference("network.proxy.type", 1)。
- network.proxy.type比较特别,是个枚举,对应几种不同的代理设置方式
- 特殊情况下,比如特殊的公司网络下,浏览器在访问网页时需要使用代理服务器(可能是固定的,也可能是pac脚本动态判断的),这是有可能代理服务器会让你输入域账户的账号密码。这个很难处理(不处理的话就卡在这里了,没发进一步操作页面),selenium和geckodriver只提供了配置代理服务器的方式、地址、端口的变量,并没有提供设置账号密码的地方。网上有人说就是不支持。然后以前有个close-proxy-authentication的火狐插件也已经下架不能用了。自己写脚本往弹窗里填充有点困难。。。不是一个html页面。。。要抓包看看了?
- 因为公司的代理服务器做了认证的设置?
- 尝试设置系统网络的自动完成功能?
- Windows的话尝试使用Windows凭证?
- 可以使用前面Profile的办法,找到prefs.js文件查看有没有手动在浏览器中设置的账号密码,有的话就用到代码中
- 还有一个可能:火狐的代理设置页面的下面有一个选项“如果密码已保存,不提示身份验证(I)”,是不是勾选了就行了?即使selenium启动的火狐是一个全新的profile,也可以在prefs.js文件中找到相关的配置,配到代码中?
- 终于解决了!!!!!!!!!!在全局的cmd的环境变量中添加代理的认证信息,export http_proxy_user=”” and export http_proxy_pass=””,有可能同时要使用保存的账号密码,有可能代理要用系统设置
TestNG+Selenium的更多相关文章
- Idea+maven+testNG+Selenium+ReportNG自动化框架搭建
1.Idea创建一个空的Maven项目 创建后默认项目目录如图所示 2.配置pom.xml文件 <?xml version="1.0" encoding="UTF- ...
- jenkins maven testng selenium自动化持续集成
准备环境 首先我们新建一个maven的工程,并且在pom.xml中配置好我们依赖的一些jar包 <dependencies> <dependency> <groupId& ...
- ant+jenkins+testng+selenium集成环境搭建
一.前序工作 下载ant:http://ant.apache.org/bindownload.cgi 下载jenkins:http://jenkins-ci.org/ 下载testng:http:// ...
- java+jenkins+testng+selenium+ant
1.安装jdk7以上2.http://mirrors.jenkins-ci.org/windows/latest 下载最新的war包3.cmd命令在war包目录下执行:java -jar jenkin ...
- TestNG测试框架在基于Selenium进行的web自动化测试中的应用
转载请注明出自天外归云的博客园:http://www.cnblogs.com/LanTianYou/ TestNG+Selenium+Ant TestNG这个测试框架可以很好的和基于Selenium的 ...
- TestNG的一个不足之处
PS:本博客selenium分类不会记载selenium打开浏览器,定位元素,操作页面元素,切换到iframe,处理alter.confirm和prompt对话框这些在网上随处可见的信息:本博客此分类 ...
- Selenium自动化测试-进阶2-框架篇
前面的文章已经讲述了 Selenium自动化的入门知识,不知道各位看官看懂没有,有不懂的请留言. 接下来,开始讲解 Selenium自动化测试进阶知识. 首先讲解:自动化测试的核心: 利用自动化程序代 ...
- Selenium Web 自动化 - 项目实战(一)
Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...
- TestNg学习
参考:https://www.yiibai.com/testng/junit-vs-testng-comparison.html#article-start 1.JUnit缺点: 最初的设计,使用于单 ...
随机推荐
- **__new__和__init__
这个__new__之前在写单例模式的时候用到过,下面做个深入了解吧. __new__是一个静态方法,而__init__是一个实例方法. __new__方法会返回一个创建的实例,而__init__什么都 ...
- Spring 学习记录4 ResourceLoader
ResourceLoader Spring的ApplicationContext继承了ResourceLoader接口.这个接口主要就是可以加载各种resource.. 接口还是比较简单的: /* * ...
- 强大的vim配置文件,让编程更随意 (转载)
花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主要有以下优点: 1.按F5可以直接编译并执行C.C++.java代码以及执行shell脚本,按“F8”可进行C.C++代码的调试 2. ...
- linux查看电脑硬件配置
1. 查看CPU cat /proc/cpuinfo 2. 查看内存 free -m 3. 查看硬盘分区 fdisk -l 4. 查看网卡信息或者ip地址 ifconfig 5. 查看详细的网卡工作模 ...
- centos7的vsftpd的安装和配置
安装vsftpd的服务器相关软件 安装vsftpd服务器和客户端 sudo yum install ftp vsftpd 安装一个加密工具 sudo yum install libdb-utils.x ...
- 【POJ1284】Primitive Roots
[题目大意] 给你一个素数n,求n的原根个数. [题解] 关于原根有一个定理: 定理:如果模有原根,那么它一共有个原根. 所以这题就是求phi[phi[n]] 很简单吧...(如果知道这个定理的话) ...
- linux系统的命令组与函数
一.命令组 许多时候,我们在shell操作上,需要在一定条件下一次执行多个命令,也就是说,要么不执行,要么就全执行,而不是每次依序的判断是否要执行下一个命令.或是,需要从一些命令执行优先次顺中得到豁免 ...
- redis缓存分页思路
传统分页一般分页做缓存都是直接查找出来,按页放到缓存里,但是这种缓存方式有很多缺点.如缓存不能及时更新,一旦数据有变化,所有的之前的分页缓存都失效了.比如像微博这样的场景,微博下面现在有一个顶次数的排 ...
- loadrunner load generator设置init人数
Load Generator中还有一个很重要的设置.就是用来设置init人数的,我们在运行脚本的时候会发现,在场景监控中,init默认不会超过50个人,也就是最大并发是50个人,我们想使用超过50个人 ...
- [C++] Lvalue and Rvalue Reference
Lvalue and Rvalue Reference int a = 10;// a is in stack int& ra = a; // 左值引用 int* && pa ...