利用Selenium自动化测试android wap页

http://blogs.360.cn/360qtest/2014/04/01/%E5%88%A9%E7%94%A8selenium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95android-wap%E9%A1%B5/

针对智能手机端的应用的自动化测试,目前主要分两类:一是基于APP的apk自动化测试,二是浏览器的wap页测试。目前做的较多的是第一种情况,应用的自动化测试框架也较多,如NativeDriver、Robotium、calabash等;而第二种情况的自动化测试框架就较少了,目前较常用的为Selenium。

而利用Selenium的测试框架有Selenium+Junit、Selenium+testng为最常用。这里我就介绍下利用Selenium+testng测试手机端的wap页的页面展示。

该框架测试有个明显的缺点是:它利用AndroidDriver驱动,提供webview来显示http请求返回的内容,不能在其他浏览器上运行,就是说不能测试浏览器的兼容性。但这个可以测试不同机型的手机,做适配测试。因为webview使用android内置webkitt内核,不同机型的内核是有异的。

第一步,利用该框架测试手机端wap页时,必须在测试工程中(java project)导入selenium-server-standalone-2.25.0.jar和testng.jar。同时在手机端需要安装(webdriver)android-server-xxx.apk作为服务端分发http请求命令和显示返回内容。

第二步,在工程中,在准备好了上面的条件,可以通过命令来打开手机端的webdriver和连接服务端(启动手机端的webdriver)——放在测试用例执行前;当然也可以手动启动webdriver和在DOS下运行命令:

@BeforeTest
	public void setUp() {
		// 启动手机端的webdriver——作为服务端,没有其他前台应用
		try {
			//打开webdriver
Runtime.getRuntime().exec( "adb shell am start -a android.intent.action.MAIN " +	"-n org.openqa.selenium.android.app/.MainActivity");
/*连接服务端webdriver,连接用的端口为8080,如果本地有开启了或使用了该端口,需要关闭(http://localhost:8080/exit),不然连接不上服务端webdriver   */
 Runtime.getRuntime().exec("adb forward tcp:8080 tcp:8080");
		} catch (IOException e) {
			e.printStackTrace();
		}
		driver = new AndroidDriver();
	}

第三步,写测试用例,如

//用例中要用到外来数据时,作为参数queryString1传递,来源为dataProvider = “testdata”中的数据

@Test(dataProvider = "testdata")
    public void testQuery1(String queryString1) {
//具体的用例执行(包括调用滑动和截屏,来达到获取想要的页面)
}

第四步,用例执行完之后,需要关闭终止驱动

@AfterTest
	public void tearDown() {
		driver.quit();
	}

二、关于testng用例中带参数的数据源获取,在testng中大概有三种方法:一种是在testng.xml里配置,用@Parameters引用;第二种是使用DataProvider;第三种是继承FeedTest类获取数据。

这里主要讲下,第二种和第三种的使用:

1、使用DataProvider时,会在用例方法前有@Test(dataProvider = “testdata”),如

@Test(dataProvider = "testdata")
	public void testQuery1(String queryString1) {
try {
				// 统一编码格式
				QUERY = URLEncoder.encode(queryString1.trim(), "utf-8");
			} catch (UnsupportedEncodingException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
//具体的用例执行
}

同时有个方法是获取数据源的,如以下例子,从txt文件中读取数据,并放在filelist中,为了DataProvider方便执行,返回列表的迭代器。读取数据时,有个编码encoding处理,这个是为了保证txt文件存储格式(UTF-8)一致,一遍用例执行使用的数据不会出现数据表示不一致的情况。当然为了任何地方一致,用例中对数据也最好处理,如上。

@DataProvider(name = "testdata")
	public Iterator<String[]> getData() {
		ArrayList<String[]> filelist = new ArrayList<String[]>();
		String filepath = Data.getFileString();
		try {
			String encoding = "UTF-8";
			File file = new File(filepath);
			if (file.isFile() && file.exists()) {
				// 判断文件是否存在
				InputStreamReader read = new InputStreamReader(
						new FileInputStream(file), encoding);
				// 考虑到编码格式
				BufferedReader bufferedReader = new BufferedReader(read);
				String lineTxt = "";
				while ((lineTxt = bufferedReader.readLine()) != null) {
					String[] str = new String[1];
					str[0] = lineTxt.trim();
					filelist.add(str);
				}
				read.close();
			} else {
				System.out.println("找不到指定的文件");
			}
		} catch (Exception e) {
			System.out.println("读取文件内容出错");
			e.printStackTrace();
		}
		return filelist.iterator();
	}

2、使用FeedTest获取数据时,必须导入feed4testng-1.0-dist里的jar包才能使用,然后在测试类中继承FeedTest类就行,这个能自动读取数据,现在支持自动读取的有.xls和.cvs文件

public class OneTest extends FeedTest {

     @Test(dataProvider = "feeder")

     // 数据来源excel文件xls(97-2003版的)
    @Source("D:/case/testcase2.xls")
public void testQuery1(String queryString1) {

 /* 参数分别是读取xls文件的第一列、、、,第一行数据读不出,那是因为默认数据字段名称  */     }
}

使用该方式读取数据,我们可以不用再自己写方法读取数据了。但缺点就是数据来源的路径是固定的,如果在运行时要改变数据来源,是不行的。

除了支持两种文件可以@Source自动读取,可以读取其他类型的文件和数据库,具体可参见:

http://databene.org/feed4testng.html

三、针对自动化测试wap页面展示问题,当要测试的展示页面是通过在页面输入一个搜索词query的返回结果时,且query较多。在这种情况下我们手工输入再看页面展示,工作量就较大了。所以需要自动化测试(利用selenium),这样我们就不需要手动输入query再滑动页面看页面展示了;只需要看截下来的页面展示图就可以了 。那我们要实现的自动化就有搜索词展示、滑动页面到能看到的视区内、截屏。

  1. 针对搜索词query,有个注意的地方就是:搜索词不能有中文,如 element.sendKeys(“比亚迪”);就是不行,webdriver调起输入法时,只有英文输入那个界面。解决这个问题的方法就是把搜索词query放在URL里,如driver.get(“http://m.so.com/s?q=”+”比亚迪”);
  2. 针对搜索词的结果页,当前屏幕显示的不一定是需要的展示,而我们要截屏,又只能截取当前显示的,那么就只能滑动页面到当前显示的界面。

滑动有两种方法:两种方法都依赖于定位的元素element

如:下面的代码表示我想找测试类别为“汽车”的搜索词的某种展示,结果显示条数>=1。

// 该方法可以根据测试要求改变,(定位到什么元素)
	public WebElement scrollCondition(WebDriver driver, String queryclass) {
		// 寻找当前显示是否到达要求的显示,不是的话滑动
		if (!queryclass.isEmpty()) {
			if (queryclass.contains("汽车")) {
				// 汽车类
				elements = driver.findElements(By
						.xpath("//h1 [@class=‘car-title icon-mobile‘]"));
			}
}
if ((elements != null) && (elements.size() > 0)) {
			element = elements.get(0);
		}
}

方法一:

//该方法滑动后不停留,不利于截屏,不建议使用
      Actions action=new Actions(driver);
    action.moveToElement(element).perform();

方法二:

 ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView();", element);

关于截屏可以利用ddmlib来截取(需要ddmlib.jar)

http://blogs.360.cn/360qtest/2014/02/28/通过ddmlib实现截图以及获取手机相关信息/

时间: 2024-10-12 17:33:50

利用Selenium自动化测试android wap页的相关文章

利用Selenium自动化测试android wap页1

最近开始研究Android  wap app 的自动化测试,各大论坛及博客逛了几圈,竟是没发现有用的,而且大部分都是转载,千篇一律,最后好不容易找到点门路 ,同事借了本书,研究半天又发现那书早已过时了,版本都不知更新了几圈了.故跃墙去了官网, 总算是入门了.一鼓作气,记录下详细步骤及成果,供后来者学习之用. 目的:实现Android 浏览器的wap页测试 .

用Selenium自动化测试android wap页面

利用Selenium自动化测试android wap页面:http://blogs.360.cn/360qtest/2014/04/01/%E5%88%A9%E7%94%A8selenium%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95android-wap%E9%A1%B5/

【python爬虫】利用selenium和Chrome浏览器进行自动化网页搜索与浏览

功能简介:利用利用selenium和Chrome浏览器,让其自动打开百度页面,并设置为每页显示50条,接着在百度的搜索框中输入selenium,进行查询.然后再打开的页面中选中“Selenium - 开源中国社区”,并打开页面 知识简介: selenium的作用: 1).最初用于网站自动化测试,近几年,用于获取精确的网站快照. 2).可以直接运行在浏览器上,让浏览器自动加载页面,获取需要的数据,还可以页面截屏,或者判断网站上某些动作是否发生. 项目步骤: 1.利用google的Chrome浏览器

Selenium自动化测试-进阶2-框架篇

前面的文章已经讲述了 Selenium自动化的入门知识,不知道各位看官看懂没有,有不懂的请留言. 接下来,开始讲解 Selenium自动化测试进阶知识. 首先讲解:自动化测试的核心: 利用自动化程序代替手工,实现复杂繁琐的测试. 所以:自动化测试的运行必须是准确的,否则费时费力. 什么样的程序是准确的?? 准确的自动化程是 95%以上Error是真正的错误.否则,自动化测试就是失败的. 那么,要怎么提高自动化测试运行的准确率呢? 把基础学扎实了! 要学好自动化,Java要学好,然后是 JS,当然

[python]利用selenium模拟用户操作抓取天猫评论数据

准备: python3.5 安装selenium包 第一种方法: cmd里输pip install selenium,但是经常报错 第二种方法: 下载安装包-cmd进入解压路径-python setup.py install-报错permission denied-右键安全更改报错文件夹权限为完全控制-再次安装成功unknown error: unable to discover open pages-下载chromedriver放在环境变量目录下测试自动打开百度时提示"您使用的是不受支持的命令

基于python语言的Selenium自动化测试

  一.Selenium简介 Selenium是一个web自动化应用测试工具,还支持所有的web的管理任务自动化.并且开源免费,也是一个web自动化轻量级框架.它支持多种浏览器.跨平台.跨操作系统.支持多种编程语言编写脚本,还能进行分布式测试用例的执行. Selenium经历三个版本,Selenium1.Selenium2.Selenium3.它不是单独的一个工具,而是由一些类库.插件.工具等组合而成.主要的工具: Selenium IDE:Selenium IDE是嵌入火狐浏览器中的一个插件,

利用Selenium爬取淘宝商品信息

一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样.由于这个性质,Selenium也是一个强大的网络数据采集工具,其可以让浏览器自动加载页面,这样,使用了异步加载技术的网页,也可获取其需要的数据. Selenium模块是Python的第三方库,可以通过pip进行安装: pip3 install selenium Selenium自己不带浏览器,需要配合第三方浏览器来使用.通过help命

《手把手教你》系列进阶篇之2-python+ selenium自动化测试 - python基础扫盲(详细教程)

1. 简介 这篇文章主要是分享讲解一下,如何封装自己用到的方法和类.以便方便自己和别人的调用,这样就可以避免重复地再造轮子. 封装(Encapsulation)是面向对象的三大特征之一(另外两个是继承和多态),它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法来实现对内部信息的操作和访问. 就好比使用计算机,我们只需要使用计算机提供的键盘,就可以达到操作计算机的目的,至于在敲击键盘时计算机内部是如何工作,我们根本不需要知道. 封装机制保证了类内部

selenium自动化测试(1):环境搭建

Selenium是一款优秀的WEB自动化测试工具,它功能强大,易于使用,支持多种平台.多种浏览器和多种开发语言.这里介绍使用python+selenium进行自动化测试的一些基础知识. 在Windows下搭建测试环境,首先需要下载Python,Selenium应该还不支持Python 3.x系列,所以最好选择Python 2.x,注意区分32位和64位. Python的安装特别简单,需要提醒的是,安装路径中千万不要包含空格(最好也别包含中文),否则后面使用pip安装扩展包的时候可能会失败!其他的