appium基础(一)
appium
测试用例的重要组成
-
启动appium
- 启动参数 --session-override
- 获得可访问的url
- 准本手机设备或者虚拟机
-
编写脚本
- 导入依赖
- capabilities设置
- 元素定位与操作find+action
- 断言assert
import io.appium.java_client.MobileElement; import io.appium.java_client.TouchAction; import io.appium.java_client.android.AndroidDriver; import io.appium.java_client.touch.offset.PointOption; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.Dimension; import org.openqa.selenium.Point; import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.DesiredCapabilities; import java.net.MalformedURLException; import java.net.URL; import java.util.concurrent.TimeUnit; public class demoTest { private AndroidDriver driver; @Before public void setUp() throws MalformedURLException { DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); //desiredCapabilities.setCapability("deviceName", "192.168.71.101:5555"); desiredCapabilities.setCapability("deviceName", "192.168.242.105:5555"); desiredCapabilities.setCapability("platformName", "Android"); desiredCapabilities.setCapability("appPackage", "com.DaTong.InsuranceForAndroid"); desiredCapabilities.setCapability("appActivity", ".StartActivity"); desiredCapabilities.setCapability("ensureWebviewsHavePages", true); URL remoteUrl = new URL("http://localhost:4723/wd/hub"); driver = new AndroidDriver(remoteUrl, desiredCapabilities); } @Test public void sampleTest() throws InterruptedException { TimeUnit.SECONDS.sleep(5); MobileElement el1 = (MobileElement) driver.findElementById("com.DaTong.InsuranceForAndroid:id/buttonOK"); el1.click(); WebElement elem = driver.findElementById("com.DaTong.InsuranceForAndroid:id/image"); Point start = elem.getLocation(); TouchAction ta = new TouchAction(driver); int startX = start.x; int startY = start.y; Dimension q = elem.getSize(); int x = q.getWidth(); int y = q.getHeight(); int endX = x + startX; int endY = y + startY; int centreX = (endX + startX) - 2; int centreY = (endY + startY) - 2; Point a = new Point(centreX,centreY); Point b = new Point(centreX/10,centreY); ta.press(PointOption.point(a)).moveTo(PointOption.point(b)).release().perform(); ta.press(PointOption.point(a)).moveTo(PointOption.point(b)).release().perform(); ta.press(PointOption.point(a)).moveTo(PointOption.point(b)).release().perform(); MobileElement el2 = (MobileElement) driver.findElementById("com.android.packageinstaller:id/permission_allow_button"); el2.click(); el2.click(); MobileElement el3 = (MobileElement) driver.findElementByXPath("//*[@resource-id=‘com.DaTong.InsuranceForAndroid:id/tvIconTitle‘ and @text=‘计划书‘]"); el2.click(); } @After public void tearDown() { // driver.quit(); } }
获取app的入口
- platformName
- deviceName
- app入口
- Android:appPackage+appActivity。获取方法如下:
- Windows:adb -s 192.168.71.101:5555 logcat -s ActivityManager
- Linux:adb -s 192.168.71.101:5555 logcat |greo -i ActivityManager
- iOS:bundleID
- 浏览器:browserName
- Android:appPackage+appActivity。获取方法如下:
capabilities设置
- app apk 地址
- appPackage 包名
- appActivity Activity 名字
- automationName 默认使用uiautomator
- noReset fullReset 是否在测试前后重置相关环境
- UnicodeKeyBoard resetKeyboard 是否需要输入非英文之外的语言并在测试完成后重置输入法
- 详细可设置哪些内容可查看官方文档:
- 例如
- 设置app启动不重置(即不再授权noReset)
- 指定设备执行:udid
- 启用中文输入:unicodeKeyboard
- 自动授权:autoGrantPermissions
- 例如
测试步骤
-
定位
-
id
-
xpath:
# 元素定位-组合定位方式 driver.find_element_by_xpath("//*[@resource-id=‘com.tfffc.cf:id/id_text‘ and @text=‘我的‘]").click()
-
accessibityId:conttent-desc
-
不推荐使用:class-ios、-android
-
-
交互
-
断言
-
简单的断言用:import static org.junit.Assert.assertEquals;
assertEquals("大童邀请函",driver.findElementById("com.DaTong.InsuranceForAndroid:id/titleBar_title").getText());
-
常用断言:hamcrest(查看官方文档即可)
-
常见操作
详细查看官方文档:
以下是简单介绍常用操作,具体查看官方文档。
-
drvier:
-
find定位元素
-
getPageSource获取元素列表
-
getLocation获取元素位置
-
quit退出
-
activateapp激活app
-
swich_to切换至其他页面
-
截图:FileUtils.copyFile(driver.getScreenshotAs(OutputType.FILE),new File("1.png"));
-
-
具体元素操作:
-
el2.click();//点击
-
el2.getAttribute();//获取元素属性
-
el2.isDisplayed();//元素是否展现
-
el2.sendKeys(‘dfaf‘);//输入中文,启动app时,capabilities需要设置unicodekeyboard为true
-
-
手势操作:
-
详细查看官方文档:
-
press
-
release
-
moveTo
-
tap wait
-
longPress
-
cancel
-
perform
-
例子:
ta.press(PointOption.point(a)).moveTo(PointOption.point(b)).release().perform();
-
原文:https://www.cnblogs.com/novice77/p/14872099.html