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缺点: 最初的设计,使用于单 ...
随机推荐
- 我的Linux之路——windows10用WMware安装CentOS6.9 虚拟机详细步骤
出自:http://blog.51cto.com/13438667/2059926 一.安装环境 windows10操作系统物理机VMware Workstation 软件(可以在网上下载)CentO ...
- Python格式符说明
格式化输出 例如我想输出 我的名字是xxxx 年龄是xxxx name = "Lucy"age = 17print("我的名字是%s,年龄是%d"%(name, ...
- UNITY 带spriterender的对象导出为prefab时主贴图丢失的BUG
从场景导出带有sprite的对象为prefab时贴图丢失的BUG.解决方案:对场景中每个sprite重新赋一下贴图,然后导出就好了,原因不明. 补充:这个有时候是因为贴图类型不是 2D AND UI ...
- 网卡流量监控脚本 ( Shell )
#!/bin/bash # Traffic Monitor # author: Xiao Guaishou get_traffic_info(){ recv=`cat /proc/net/dev | ...
- LeetCode之位操作题java
191. Number of 1 Bits Total Accepted: 87985 Total Submissions: 234407 Difficulty: Easy Write a funct ...
- 刷题向》一道逆向思维题(BZOJ1046)(NORMAL)
这道题对于一类题都有一个通用思路:反向递减序列即为正向字典序. 对于逆向思维的题还要多做才能培养这种对于逆向思维的感觉. 想到这种方法之后,就很简单了. 因为n×m不会炸,所以反向LIS叠一个贪心就能 ...
- zabbix自动发现监控mysql
一. 数据库给只读权限 1.1 grant usage on *.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'; flush privileges; ...
- Windows下redis的安装与使用
Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- Eclipse集成tomcat
1.window --> Preferences 2.搜索runtime,选择Runtime Environments,点击add按钮 3.选择tomacat的版本,我的版本是7.x的,所以选择 ...
- 【转载】MYSQL模式匹配:REGEXP和like用法
转载地址:http://www.webjx.com/database/mysql-32809.html like like要求整个数据都要匹配,而REGEXP只需要部分匹配即可. 也就是说,用Like ...