1 先下载 Appium 并安装
下载链接:
2 运行Appium 并启动服务
选择简单模式 , 然后配置服务器为127.0.0.1 :4723
然后点击启动服务器
如果是如下界面 则服务器启动完成
新建会话界面
快捷键为 ctrl + N , 新建会话界面,选择自动设定
配置platformName ,platformVersion 等信息
- platformVersion :模拟器或真机的安卓版本
- platformName :Andrioid/其他
- automationName :uiautomator2
- noReset : true
- appActivity :
- appPackage:
- deviceName:
appActivity appPackage deviceName ,通过adb 命令获取
//获取 appActivity appPackage
adb shell dumpsys activity activities | findstr "mResumedActivity"
//获取deviceName
adb devices
先以模拟器的计算器为测试对象 ,全部配置好如下图所示
配置好先启动模拟器 , 再点击启动会话
然后找到控件的id 给来待会写测试用例用
3 用kotlin编写测试用例
先依赖 java-client库
implementation "io.appium:java-client:4.1.2"
把计算器页面的id全部找出来
通过 findElementById 、 findElementByAccessibilityId 把控件找到
//数字 1 - 9
val digit_1 =
driver.findElementById("com.android.calculator2:id/digit_1") as MobileElement
val digit_2 =
driver.findElementById("com.android.calculator2:id/digit_2") as MobileElement
val digit_3 =
driver.findElementById("com.android.calculator2:id/digit_3") as MobileElement
val digit_4 =
driver.findElementById("com.android.calculator2:id/digit_4") as MobileElement
val digit_5 =
driver.findElementById("com.android.calculator2:id/digit_5") as MobileElement
val digit_6 =
driver.findElementById("com.android.calculator2:id/digit_6") as MobileElement
val digit_7 =
driver.findElementById("com.android.calculator2:id/digit_7") as MobileElement
val digit_8 =
driver.findElementById("com.android.calculator2:id/digit_8") as MobileElement
val digit_9 =
driver.findElementById("com.android.calculator2:id/digit_9") as MobileElement
//加减乘除
val add = driver.findElementByAccessibilityId("plus");
val red = driver.findElementByAccessibilityId("minus");
val mul = driver.findElementByAccessibilityId("multiply");
val div = driver.findElementByAccessibilityId("divide");
val clear = driver.findElementByAccessibilityId("delete");
val equals = driver.findElementByAccessibilityId("equals");
val result =
driver.findElementById("com.android.calculator2:id/result") as MobileElement
找到控件开始编写测试用例
测试执行100次
长按清空 -> 点击1 -> 点击加->点击2->点击减->...->最后把结果打印出来 println(result.text)
for (i in 1..100) {
//先长按清空
val action1 = TouchAction(driver)
action1.longPress(clear).perform()
action1.release()
digit_1.click()
add.click()
digit_2.click()
red.click()
digit_3.click()
mul.click()
digit_4.click()
div.click()
digit_5.click()
digit_6.click()
digit_7.click()
println(result.text)
}
完整代码如下
import com.google.gson.Gson
import io.appium.java_client.MobileElement
import io.appium.java_client.TouchAction
import io.appium.java_client.android.AndroidDriver
import io.appium.java_client.android.AndroidElement
import io.appium.java_client.remote.AndroidMobileCapabilityType
import io.appium.java_client.remote.MobileCapabilityType
import org.openqa.selenium.interactions.touch.TouchActions
import org.openqa.selenium.remote.DesiredCapabilities
import java.net.URL
class Test {
companion object {
const val url = "http://localhost:4723/wd/hub"
val json = """
{
"platformName": "Android",
"platformVersion": "7",
"automationName": "uiautomator2",
"appPackage": "com.android.calculator2",
"appActivity": ".Calculator",
"noReset": "true",
"deviceName": "emulator-5554"
}
""".trimIndent()
val jsonObj = Gson().fromJson(json, HashMap::class.java)
private val serverURL = URL(url)
private val capabilities by lazy {
DesiredCapabilities().apply {
setCapability(
MobileCapabilityType.PLATFORM_NAME,
jsonObj.get("platformName")
)
setCapability(MobileCapabilityType.DEVICE_NAME, jsonObj.get("deviceName"))
setCapability(
MobileCapabilityType.PLATFORM_VERSION,
jsonObj.get("platformVersion")
)
setCapability(
MobileCapabilityType.AUTOMATION_NAME,
jsonObj.get("automationName")
)
setCapability(MobileCapabilityType.NO_RESET, jsonObj.get("noReset"))
setCapability(
AndroidMobileCapabilityType.APP_PACKAGE,
jsonObj.get("appPackage")
)
setCapability(
AndroidMobileCapabilityType.APP_ACTIVITY,
jsonObj.get("appActivity")
)
}
}
private val driver by lazy { AndroidDriver<AndroidElement>(serverURL, capabilities) }
@JvmStatic
fun main(args: Array<String>) {
val digit_1 =
driver.findElementById("com.android.calculator2:id/digit_1") as MobileElement
val digit_2 =
driver.findElementById("com.android.calculator2:id/digit_2") as MobileElement
val digit_3 =
driver.findElementById("com.android.calculator2:id/digit_3") as MobileElement
val digit_4 =
driver.findElementById("com.android.calculator2:id/digit_4") as MobileElement
val digit_5 =
driver.findElementById("com.android.calculator2:id/digit_5") as MobileElement
val digit_6 =
driver.findElementById("com.android.calculator2:id/digit_6") as MobileElement
val digit_7 =
driver.findElementById("com.android.calculator2:id/digit_7") as MobileElement
val digit_8 =
driver.findElementById("com.android.calculator2:id/digit_8") as MobileElement
val digit_9 =
driver.findElementById("com.android.calculator2:id/digit_9") as MobileElement
val add = driver.findElementByAccessibilityId("plus");
val red = driver.findElementByAccessibilityId("minus");
val mul = driver.findElementByAccessibilityId("multiply");
val div = driver.findElementByAccessibilityId("divide");
val clear = driver.findElementByAccessibilityId("delete");
val equals = driver.findElementByAccessibilityId("equals");
val result =
driver.findElementById("com.android.calculator2:id/result") as MobileElement
for (i in 1..100) {
val action1 = TouchAction(driver)
action1.longPress(clear).perform()
action1.release()
digit_1.click()
add.click()
digit_2.click()
red.click()
digit_3.click()
mul.click()
digit_4.click()
div.click()
digit_5.click()
digit_6.click()
digit_7.click()
println(result.text)
}
}
}
}
运行测试
控制台打印结果