51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1606|回复: 0
打印 上一主题 下一主题

appium 处理动态控件

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-4-8 09:11:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近有人问我appium能否处理动态生成的控件,由于以没做过,不敢肯定,所以就自己谢了一个测试Demo



由于自己不小心appiumDemo打错写为apppiumDemo

第一步: 创建Android project 在onCreate方法里添加一个button控件

复制代码
1 Button bt = new Button(this);
2         bt.setText("Test");
3         bt.setPadding(300, 0, 0, 0);
4         
5         RelativeLayout relativeLayout = (RelativeLayout) getLayoutInflater()
6                 .inflate(R.layout.activity_main, null);
7         RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
8                 ViewGroup.LayoutParams.MATCH_PARENT,
9                 ViewGroup.LayoutParams.WRAP_CONTENT);
10         layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, -1);
11         relativeLayout.addView(bt, layoutParams);
12         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验证

复制代码
  1. 1 package com.dbyl.core;
  2. 2
  3. 3 import org.openqa.selenium.remote.CapabilityType;
  4. 4 import org.openqa.selenium.remote.DesiredCapabilities;
  5. 5 import org.testng.Assert;
  6. 6 import org.testng.annotations.AfterMethod;
  7. 7 import org.testng.annotations.BeforeMethod;
  8. 8 import org.testng.annotations.Test;
  9. 9
  10. 10 import io.appium.java_client.android.AndroidDriver;
  11. 11
  12. 12 import java.io.File;
  13. 13 import java.net.URL;
  14. 14 import java.util.concurrent.TimeUnit;
  15. 15
  16. 16 public class AppDemo {
  17. 17     private AndroidDriver driver;
  18. 18
  19. 19     @BeforeMethod(alwaysRun = true)
  20. 20     public void setUp() throws Exception {
  21. 21         // set up appium
  22. 22         DesiredCapabilities capabilities = new DesiredCapabilities();
  23. 23         capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
  24. 24         capabilities.setCapability("platformName", "Android");
  25. 25         capabilities.setCapability("deviceName", "Android Emulator");
  26. 26         capabilities.setCapability("platformVersion", "4.4");
  27. 27         // if no need install don't add this
  28. 28
  29. 29         File classpathRoot = new File(System.getProperty("user.dir"));
  30. 30         File appDir = new File(classpathRoot, "apps");
  31. 31         File app = new File(appDir, "apppiumDemo.apk");
  32. 32         capabilities.setCapability("app", app.getAbsolutePath());
  33. 33
  34. 34         capabilities.setCapability("appPackage", "com.example.apppiumdemo");
  35. 35         // support Chinese
  36. 36         capabilities.setCapability("unicodeKeyboard", "True");
  37. 37         capabilities.setCapability("resetKeyboard", "True");
  38. 38         // no need sign
  39. 39         capabilities.setCapability("noSign", "True");
  40. 40         capabilities.setCapability("appActivity", ".MainActivity");
  41. 41         driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),
  42. 42                 capabilities);
  43. 43     }
  44. 44
  45. 45     @AfterMethod(alwaysRun = true)
  46. 46     public void tearDown() throws Exception {
  47. 47         driver.quit();
  48. 48     }
  49. 49
  50. 50     @Test(groups = { "Test" })
  51. 51     public void Test() {
  52. 52         driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
  53. 53         Assert.assertEquals(driver.findElementByClassName("android.widget.Button").getText(),"Test");
  54. 54         System.out.println(driver.findElementByXPath("//android.widget.Button").getText());
  55. 55         
  56. 56
  57. 57     }
  58. 58 }
复制代码

复制代码
运行结果:



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等

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-20 21:26 , Processed in 0.064443 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表