51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1930|回复: 1
打印 上一主题 下一主题

appium 自动化测试之知乎Android客户端-识别元素

[复制链接]
  • TA的每日心情
    郁闷
    2022-8-29 14:43
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2018-2-24 09:45:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    我们研究一下测试知乎Android客户端。自行下载

    配置目录如下:把知乎客户端命名为zhihu.apk

    编写基于java testng的测试用例:

    由于本人是熟悉selenium webdriver,所以在Android对象识别时,采用的策略和selenium webdriver
    类似
    怎么去识别APP的元素的,这里用到Android SDK  tools 目录下的工具uiautomatorviewer ,
    执行uiautomatorviewer.bat就可
    首先解析zhihu app 拿到其package 和 activity,这里使用appium gui界面,具体操作如图:


    接下来识别APP的元素,比如登陆按钮,看到resourceId,可以是雨天webdriver的find Element By.id

    至于登陆用户名和密码,在Android中都是EditText控件,可以使用By.class

    完成对象识别,最终代码如下:
    1. package com.dbyl.core;

    2. import org.openqa.selenium.By;
    3. import org.openqa.selenium.WebElement;
    4. import org.openqa.selenium.remote.CapabilityType;
    5. import org.openqa.selenium.remote.DesiredCapabilities;



    6. import org.testng.Assert;
    7. import org.testng.annotations.AfterMethod;
    8. import org.testng.annotations.BeforeMethod;
    9. import org.testng.annotations.Test;

    10. import io.appium.java_client.android.AndroidDriver;

    11. import java.io.File;
    12. import java.net.URL;
    13. import java.util.List;
    14. import java.util.concurrent.TimeUnit;

    15. public class zhiHu {
    16.     private  AndroidDriver  driver;

    17.     @BeforeMethod(alwaysRun=true)
    18.     public void setUp() throws Exception {
    19.         // set up appium
    20.         File classpathRoot = new File(System.getProperty("user.dir"));
    21.         File appDir = new File(classpathRoot, "apps");
    22.         File app = new File(appDir, "zhihu.apk");
    23.         DesiredCapabilities capabilities = new DesiredCapabilities();
    24.         capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
    25.         capabilities.setCapability("platformName", "Android");
    26.         capabilities.setCapability("deviceName","Android Emulator");
    27.         capabilities.setCapability("platformVersion", "4.4");
    28.         //if no need install don't add this
    29.         capabilities.setCapability("app", app.getAbsolutePath());
    30.         capabilities.setCapability("appPackage", "com.zhihu.android");
    31.         //support Chinese
    32.         capabilities.setCapability("unicodeKeyboard" ,"True");
    33.         capabilities.setCapability("resetKeyboard", "True");
    34.         //no need sign
    35.         capabilities.setCapability("noSign", "True");
    36.         capabilities.setCapability("appActivity", ".ui.activity.GuideActivity");
    37.         driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    38.     }

    39.     @AfterMethod(alwaysRun=true)
    40.     public void tearDown() throws Exception {
    41.         driver.quit();
    42.     }

    43.     @Test(groups={"ZHTest"})
    44.     public void Login(){
    45.         //find login button
    46.         WebElement loginButton = driver.findElement(By.id("com.zhihu.android:id/login"));
    47.         loginButton.click();
    48.         
    49.         //wait for 20s
    50.         driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    51.         
    52.         //find login userName and password editText
    53.         List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
    54.         textFieldsList.get(0).sendKeys("seleniumcookies@126.com");
    55.         textFieldsList.get(1).sendKeys("cookies123");
    56.         driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    57.         
    58.         //find ok button byName
    59.         driver.findElementByName("OK").click();
    60.         driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
    61.         
    62.         //find keyword 首页 and verify it is display
    63.         Assert.assertTrue( driver.findElement(By.name("首页")).isDisplayed());
    64.         
    65.         
    66.     }
    67. }
    复制代码
    接下来就可以debug,首先启动Android模拟器 ,启动完毕后再明明很测试,若结果如下:

    说明模拟器可以使用

    接下来在命令行运行apppium

    等待1-2分钟

    run as testng,就能看到自动安装,登陆知乎

    PASSED: Login

    ===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 0
    ===============================================


    ===============================================
    Default suite
    Total tests run: 1, Failures: 0, Skips: 0
    ===============================================

    [TestNG] Time taken by org.testng.reporters.EmailableReporter2@4474c7fe: 1938 ms
    [TestNG] Time taken by org.testng.reporters.JUnitReportReporter@1fdf50a3: 121 ms
    [TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
    [TestNG] Time taken by org.testng.reporters.XMLReporter@697748ae: 423 ms
    [TestNG] Time taken by org.testng.reporters.jq.Main@68450212: 1669 ms
    [TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@7f92deaf: 240 ms






    本帖子中包含更多资源

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

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

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-14 13:19 , Processed in 0.064111 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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