项目目录介绍:

CalcuatorPage.java文件代码:

package example;

import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.By; public class CalcuatorPage { public AndroidDriver driver; // 构造方法
public CalcuatorPage(AndroidDriver driver) {
this.driver = driver;
} // 加号
public void add(){
this.driver.findElement(By.id("com.android.calculator2:id/op_add")).click();
} // 减号
public void sub(){
this.driver.findElement(By.id("com.android.calculator2:id/op_sub")).click();
} // 乘号
public void mul(){
this.driver.findElement(By.id("com.android.calculator2:id/op_mul")).click();
} // 除号
public void div(){
this.driver.findElement(By.id("com.android.calculator2:id/op_div")).click();
} // 删除
public void del(){
this.driver.findElement(By.id("com.android.calculator2:id/del")).click();
} // 清除结果
public void clr(){
this.driver.findElement(By.id("com.android.calculator2:id/clr")).click();
} // 等号
public void eq(){
this.driver.findElement(By.id("com.android.calculator2:id/eq")).click();
} // 结果
public String result(){
String result = this.driver.findElement(By.id("com.android.calculator2:id/result")).getText();
return result;
}
public void number_1(){
this.driver.findElement(By.id("com.android.calculator2:id/digit_1")).click();
} public void number_2(){
this.driver.findElement(By.id("com.android.calculator2:id/digit_2")).click();
}
public void number_3(){
this.driver.findElement(By.id("com.android.calculator2:id/digit_3")).click();
}
public void number_4(){
this.driver.findElement(By.id("com.android.calculator2:id/digit_4")).click();
}
public void number_5(){
this.driver.findElement(By.id("com.android.calculator2:id/digit_5")).click();
}
public void number_6(){
this.driver.findElement(By.id("com.android.calculator2:id/digit_6")).click();
}
public void number_7(){
this.driver.findElement(By.id("com.android.calculator2:id/digit_7")).click();
}
public void number_8(){
this.driver.findElement(By.id("com.android.calculator2:id/digit_8")).click();
}
public void number_9(){
this.driver.findElement(By.id("com.android.calculator2:id/digit_9")).click();
}
public void number_0(){
this.driver.findElement(By.id("com.android.calculator2:id/digit_0")).click();
} }


CalculatorTest.java 文件代码
package example;
import io.appium.java_client.android.AndroidDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import static org.testng.Assert.assertEquals;
import java.net.MalformedURLException;
import java.net.URL; public class CalculatorTest { private AndroidDriver driver;
private CalcuatorPage calPage; @BeforeClass
public void startApp() throws MalformedURLException {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "J1");
capabilities.setCapability("automationName", "Appium");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "6.0");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity", ".Calculator"); this.driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),
capabilities);
this.calPage = new CalcuatorPage(this.driver);
} // 关闭APP
@AfterClass
public void closeApp(){
driver.quit();
} // 清空结果
@AfterMethod
public void clearResult(){
this.calPage.clr();
} @Test
public void testAdd(){
this.calPage.number_1();
this.calPage.add();
this.calPage.number_1();
this.calPage.eq();
String result = this.calPage.result();
assertEquals(result, "2");
} @Test
public void testSub(){
this.calPage.number_5();
this.calPage.sub();
this.calPage.number_3();
this.calPage.eq();
String result = this.calPage.result();
assertEquals(result, "2");
} }

 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.test1.cn</groupId>
<artifactId>testC</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<!-- https://mvnrepository.com/artifact/org.testng/testng -->
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>3.2.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
</project>

19、Page Object 实例的更多相关文章

  1. Python (Page Object实例)

    Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素和功能模块的封装减少冗余代码,同时在后期维护中,若元素定位或功能模块发生变化,只需要调整页面元素或功能模 ...

  2. Selenium(十九):unittest单元测试框架(五) Page Object设计模式

    1. Page Object设计模式 Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,它主要体现在对界面交互细节的封装,这样可以使测试方案更关注于业务而非界面细节.从 ...

  3. Selenium 2自动化测试实战39(Page Object设计模式)

    Page Object设计模式 Page object是selenium自动化测试项目开发时间的最佳设计模式之一,主要体现在对界面交互细节的封装. 1.认识page object优点如下:1.减少代码 ...

  4. selenium+Python(Page Object 设计模式实例)

    以下实例演示了采用了page Object设计模式的方式登录qq空间: 1.创建基础类page:在初始方法__init__()定义驱动的(driver),基本url(base_url)和超时时间(ti ...

  5. Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)

            研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...

  6. Page Object 模式编写UiAutomator脚本

    在我们学习Page Object Model之前,我们先了解一下Page Object Model(以下简称POM). 为什么要POM 用UiAutomator启动UI自动化测试不是一件困难的任务.你 ...

  7. Python+Selenium使用Page Object实现页面自动化测试

    Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测试的元素(按钮,输入框,标题 等),这样在Selenium测试页面中可以通 ...

  8. 页面对象(Page Object)模式

    内容转载自 https://www.cnblogs.com/yytesting/p/6973474.html 页面对象(Page Object)模式是目前自动化测试领域普遍使用的设计模式之一,此模式可 ...

  9. Python+Selenium笔记(十三):Page Object设计模式

    (一) 前言 简单的说就是分为2层,页面class 和测试class. 页面class:分为父类和子类(子类指具体的页面,每一个页面都创建一个类),父类中定义公有的属性和方法(操作). #对面向对象有 ...

随机推荐

  1. QC浏览器登陆自动关闭

    服务器(win2003 SP2)上装了个QC10,用了一段时间后突然登陆不上了.可以看见域及Project信息,但是登陆后加载几秒后突然自动关闭.局域网内的其他机器可以登陆. 解决方案:修改数据执行保 ...

  2. TP5.0 where数组高级查询

    多条件模糊查询多条件比较查询使用数组可以方便得将一些比较复杂的查询条件 , 组合到一个数组之内 如以下数据库查询 $subjectList = Db::name('user_apply') -> ...

  3. python 找到列表中满足某些条件的元素

    a = [0, 1, 2, 3, 4, 0, 2, 3, 6, 7, 5] selected = [x for x in a if x in range(1, 5)]   # 找到a中属于[1,5)中 ...

  4. PHP面试 MySQL创建高性能索引考点

    MySQL索引 MySQL索引的基础和类型 索引的基础:索引类似于书籍的目录,要想找到一本书的某个特定篇章,需要查找书的目录,定位对应的页码 存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的 ...

  5. ffmpeg -视频旋转和高清转码示例

    手头有一个竖屏拍摄的视频(真诚建议不要这么做..),导入到电脑上以后势必要把它旋转90°,可是没想到就这样简单的一个功能,尝试了N个非编软件(openshot, pitivi,还有坑爹的lives)后 ...

  6. Pandas Series数据结构基本操作

    >>> import pandas >>> import numpy as np >>> from pandas import Series,Da ...

  7. 转 Jmeter参数化--Post请求的Post body 参数化

    2018年01月22日 15:40:58 java2013liu 阅读数:2361收起 个人分类: Jemter   一.使用body data设置参数: 1,首先,使用Fiddler录制post请求 ...

  8. vue项目工具文件utils.js javascript常用工具类,javascript常用工具类,util.js

    vue项目工具文件utils.js :https://blog.csdn.net/Ajaxguan/article/details/79924249 javascript常用工具类,util.js : ...

  9. js函数方法

    /** * call()和apply * 这两个方法都是函数对象的方法,需要通过函数对象来调用 * 当对函数调用call()和apply()都会调用函数执行 * 在调用call()和apply()可以 ...

  10. 事件循环--eventloop

    一.什么是事件循环? 事件循环是 JS 实现异步的具体解决方案,同步代码直接执行,异步函数或代码块先放在异步队列中,待同步函数执行完毕,轮询执行异步队列的函数. 事件循环 二.node.js中的事件循 ...