appium 处理动态控件
2015-07-17 00:26
253 查看
环境怎么搭建,参考:/article/4969978.html
知乎Android客户端登陆:/article/4969984.html
appium实现截图和清空EditText:/article/4969987.html
appium处理滑动:/article/4969990.html
最近有人问我appium能否处理动态生成的控件,由于以没做过,不敢肯定,所以就自己谢了一个测试Demo
由于自己不小心appiumDemo打错写为apppiumDemo
第一步: 创建Android project 在onCreate方法里添加一个button控件
下载地址:http://pan.baidu.com/s/1o6mokLO
第二步:使用uiautomatorviewer获取控件
其实动态生成的控件和使用xml的一样,只不过没有添加resource-id
第三部: 获取控件
a.使用 findByClassName
b.使用xpath
第三部:使用appium验证
运行结果:
PASSED:Test
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
总结: 无论何种方式生成的控件,都可以识别,如果没有resource-id可以使用其他方式,比如ByClass ByXpath等
知乎Android客户端登陆:/article/4969984.html
appium实现截图和清空EditText:/article/4969987.html
appium处理滑动:/article/4969990.html
最近有人问我appium能否处理动态生成的控件,由于以没做过,不敢肯定,所以就自己谢了一个测试Demo
由于自己不小心appiumDemo打错写为apppiumDemo
第一步: 创建Android project 在onCreate方法里添加一个button控件
Button bt = new Button(this); bt.setText("Test"); bt.setPadding(300, 0, 0, 0); RelativeLayout relativeLayout = (RelativeLayout) getLayoutInflater() .inflate(R.layout.activity_main, null); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, -1); relativeLayout.addView(bt, layoutParams); setContentView(relativeLayout);
下载地址:http://pan.baidu.com/s/1o6mokLO
第二步:使用uiautomatorviewer获取控件
其实动态生成的控件和使用xml的一样,只不过没有添加resource-id
第三部: 获取控件
a.使用 findByClassName
driver.findElementByClassName("android.widget.Button");
b.使用xpath
driver.findElementByXPath("//android.widget.Button");
第三部:使用appium验证
package com.dbyl.core; import org.openqa.selenium.remote.CapabilityType; import org.openqa.selenium.remote.DesiredCapabilities; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import io.appium.java_client.android.AndroidDriver; import java.io.File; import java.net.URL; import java.util.concurrent.TimeUnit; public class AppDemo { private AndroidDriver driver; @BeforeMethod(alwaysRun = true) public void setUp() throws Exception { // set up appium DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.setCapability(CapabilityType.BROWSER_NAME, ""); capabilities.setCapability("platformName", "Android"); capabilities.setCapability("deviceName", "Android Emulator"); capabilities.setCapability("platformVersion", "4.4"); // if no need install don't add this File classpathRoot = new File(System.getProperty("user.dir")); File appDir = new File(classpathRoot, "apps"); File app = new File(appDir, "apppiumDemo.apk"); capabilities.setCapability("app", app.getAbsolutePath()); capabilities.setCapability("appPackage", "com.example.apppiumdemo"); // support Chinese capabilities.setCapability("unicodeKeyboard", "True"); capabilities.setCapability("resetKeyboard", "True"); // no need sign capabilities.setCapability("noSign", "True"); capabilities.setCapability("appActivity", ".MainActivity"); driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities); } @AfterMethod(alwaysRun = true) public void tearDown() throws Exception { driver.quit(); } @Test(groups = { "Test" }) public void Test() { driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); Assert.assertEquals(driver.findElementByClassName("android.widget.Button").getText(),"Test"); System.out.println(driver.findElementByXPath("//android.widget.Button").getText()); } }
运行结果:
PASSED:Test
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================
总结: 无论何种方式生成的控件,都可以识别,如果没有resource-id可以使用其他方式,比如ByClass ByXpath等
相关文章推荐
- unity计时器功能的实现
- Unity3D实现立体迷宫寻宝
- 关于android studio的配置JAVA_HOME的问题
- Android中使用Post请求
- protocol的基本使用与代理设计模式的应用
- Android 仿余额宝数字跳动动画效果完整代码
- [9秒学院]iOS培训:十大编程禁忌你必须克服
- 有爱的教育才是好的教育
- iOS开发多线程同步
- SDWebImage使用入门
- android 改变图片 字体颜色
- Android 仿余额宝数字动画实现
- 微信公众平台服务器配置
- android环境搭建
- Swift2.0语言教程之函数的返回值与函数类型
- Swift2.0语言教程之Swift2.0语言中的标准函数
- android和js的相互调用
- Android--------------如何使用真机调试程序
- 随手可得的Application对象
- Android依赖注入:Dagger(Part 3)