package org.davieyang.testscripts;
import io.appium.java_client.MobileElement;
import io.appium.java_client.android.AndroidElement;
import org.openqa.selenium.Alert;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.FindBys;
import org.openqa.selenium.support.FindAll;
import org.openqa.selenium.remote.RemoteWebElement;
import io.appium.java_client.pagefactory.*;
import io.appium.java_client.ios.IOSElement;
import java.util.List;
import static io.appium.java_client.pagefactory.LocatorGroupStrategy.CHAIN;
import static io.appium.java_client.pagefactory.LocatorGroupStrategy.ALL_POSSIBLE;
public class PageFactoryDemo {
/**
* 对于WebElement类型的元素来说,使用FindBy注解
* WebElement类型的元素指的是浏览器或web view html UI
* 如果没有在Desired Capability中指定,则也可应用于Mobile Native Application
*/
@FindBy(locateStrategy)
WebElement webElement;
@FindBy(locateStrategy)
List<WebElement> webElementList;
/**
* 在Desired Capability指定了automationName自动化测试引擎,则
* 对于原生应用native app, 分别使用@AndroidFindBy @iOSXCUITFindBy //@SelendroidFindBy(老版本)
*/
@AndroidFindBy(locateStrategy)
AndroidElement androidElement;
@AndroidFindBy(locateStrategy)
List<AndroidElement> androidElementList;
@iOSXCUITFindBy(locateStrategy)
IOSElement iosElement;
@iOSXCUITFindBy(locateStrategy)
List<IOSElement> iosElementList;
@SelendroidFindBy(locateStrategy)
RemoteWebElement remoteWebElement;
@SelendroidFindBy(locateStrategy)
List<RemoteWebElement> remoteWebElementList;
/**
* 跨平台的原生App,需要使用@AndroidFindBy @iOSXCUITFindBy同时进行注解
*/
@AndroidFindBy(locateStrategy)
@iOSXCUITFindBy(locateStrategy)
MobileElement mobileElement;
@AndroidFindBy(locateStrategy)
@iOSXCUITFindBy(locateStrategy)
List<MobileElement> mobileElementList;
/**
* 全平台,使用@FindBy @AndroidFindBy @iOSXCUITFindBy 同时进行注解
*/
@FindBy(locateStrategy)
@AndroidFindBy(locateStrategy)
@iOSXCUITFindBy(locateStrategy)
RemoteWebElement remoteWebElement;
@FindBy(locateStrategy)
@AndroidFindBy(locateStrategy)
@iOSXCUITFindBy(locateStrategy)
List<RemoteWebElement> remoteWebElementList;
/**
* Chained定位方式,使用@FindBys @AndroidFindBys @iOSXCUITFindBys 进行注解,通过多种定位方式找到
* FindBys相当于在多种定位方式中取交集,例如@FindBys({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
* 相当于首先根据locateStrategy1找到对应元素,然后在这些元素中通过locateStrategy2再次查找元素
* 这类似于driver.findelement(locateStrategy1).findelement(locateStrategy2)
*/
// 第一种方式
@FindBys({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
@AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
@iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
RemoteWebElement remoteWebElement;
@FindBys({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
@AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
@iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
List<RemoteWebElement> remoteWebElementList;
// 第二种方式
@HowToUseLocators(androidAutomation = CHAIN, iOSXCUITAutomation = CHAIN)
@FindBys({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
@AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
@iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
RemoteWebElement remoteWebElement;
@HowToUseLocators(androidAutomation = CHAIN, iOSXCUITAutomation = CHAIN)
@FindBys({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
@AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
@iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
List<RemoteWebElement> remoteWebElementList;
/**
* Possible方式,这种定位方式使用@FindAll @AndroidFindAll @iOSXCUITFindAll
* FindAll相当于在多种定位方式中取并集,例如@FindAll({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
* 相当于取到所有符合locateStrategy1和locateStrategy2的元素
*/
@HowToUseLocators(androidAutomation = ALL_POSSIBLE, iOSXCUITAutomation = ALL_POSSIBLE)
@FindAll({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
@AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
@iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
RemoteWebElement remoteWebElement;
@HowToUseLocators(androidAutomation = ALL_POSSIBLE, iOSXCUITAutomation = ALL_POSSIBLE)
@FindAll({@FindBy(locateStrategy1), @FindBy(locateStrategy2)})
@AndroidFindBy(locateStrategy1) @AndroidFindBy(locateStrategy2)
@iOSXCUITFindBy(locateStrategy1) @iOSXCUITFindBy(locateStrategy2)
List<RemoteWebElement> remoteWebElementList;
}
JavaApp自动化测试系列[v1.0.0][PageFactory注解详解]
原创Davieyang ©著作权
文章标签 PageFactory PageFactory注解 ios android java 文章分类 代码人生
-
JavaApp自动化测试系列[v1.0.0][Keycode详解]
每一种移动设备都会提供除字母和数字外的物理功能键
KEYCODE 控制键 组合键 基础键 电话键 -
JavaApp自动化测试系列[v1.0.0][Alert]
Java结合TestNG单元测试框架,实现移动端操作Alert【源码】
Alert Java TestNG Appium java -
JavaApp自动化测试系列[v1.0.0][切换]
Java结合TestNG单元测试框架,实现移动端切换操作【源码】
switch 切换 Java TestNG Appium -
JavaApp自动化测试系列[v1.0.0][滑动]
Java结合TestNG单元测试框架,实现移动端滚动操作【源码】
Scroll Appium Java TestNG 滚动 -
JavaApp自动化测试系列[v1.0.0][拖放]
Java结合TestNG单元测试框架,实现移动端拖拽操作【源码】
拖拽 Java TestNG Appium java -
JavaApp自动化测试系列[v1.0.0][缩放]
Java结合TestNG单元测试框架,实现移动端缩放【源码】
Java TestNg Pinch Zoom Appium -
JavaApp自动化测试系列[v1.0.0][Driver API详解]
Driver API实际上已经提供了足够多的功能供测试使用,针对于常用API逐一解释
Appium API Driver API 控件 string类 偏移量 -
JavaApp自动化测试系列[v1.0.0][Appium使用详解]
Appium 本身就提供了一系列的工具,例如Appium Inspector用于页面元素定位,例如录制并导出脚本功能等等
Appium GUI AppiumInspector 云服务 选项卡 标签页 -
JavaApp自动化测试系列[v1.0.0][adb命令]
adb是PC端控制移动端的桥梁,也是移动端自动化测试包括Appium自动化测试的基础,所谓自动化就是以程序测试程序,以代码代替思维,以脚本的运行代替手动操作
adb adb device adb kill-server adb forward adb install -
JavaApp自动化测试系列[v1.0.0][长按操作]
Java结合TestNG单元测试框架,实现移动端长按操作【源码】
LongPress Java TestNG Appium android -
JavaApp自动化测试系列[v1.0.0][截屏]
Java结合TestNG单元测试框架,实现移动端截屏操作【源码】
截屏 Java TestNG Appium java -
JavaApp自动化测试系列[v1.0.0][Desired Capabilities]
Desired Capabilities 就是以键值对的形式(Json格式)像Appium Server传递参数(Json对象),Appium根据这些参数启动服务,因此在启动Appium服务的时候它是必须提供的,它告诉Appium期望一个具备什么能力的服务
Desired Cap AndroidONLY UIAutomator Espresso Only iOS Only -
JavaApp自动化测试系列[v1.0.0][Appium并行测试]
Appium提供了一种方式以在一台设备上自动操作多个会话,也就是采用多个标识符的方式启动多个Appium服务器端从而实现测试并行执行
TestNG 并行测试 parameter parallel App自动化并行测试 -
JavaApp自动化测试系列[v1.0.0][uiautomatorviewer元素定位]
在WIndows系统上进行元素定位,建议使用这个工具,在Mac上建议用Appium Inspector
uiautomator App元素定位 安卓App元素定位 android java -
JavaApp自动化测试系列[v1.0.0][Page Object模式]
【附源码】Page Object模式是Selenium中的一种设计模式,Appium也继承了这种设计模式
PageObject PO模式 java androidd android -
JavaApp自动化测试系列[v1.0.0][Appium自启动]
实际上每次测试都手动启动Appium服务并非合理的,当我们将测试代码放到DevOps流程的下游,很难想象还要手动启动Appium服务,实际上可以使用AppiumDriverLocalService在代码中来完成Appium服务的启动和关闭
Appium Appium服务自启动 Appium启动方法封装 java android -
spring使用POST接受String
BeanPostProcessor1.BeanPostProcessor的概念BeanPostProcessor是一个接口,它可以使得继承它的类成为一个"回调类"(自己起的称呼),继承的方法成为回调函数;它就像Windows中Hook Api ,就是一个钩子函数,先注册这个函数,且指定一个事件目标;那么当一个事件在执行前或者后时,就会触发这个函数的执行,可以在这个事件的前后做一些操作,影响这个事件
BeanPostProcessor registerBeanPostProc postProcessBeforeIni postProcessAfterInit App