51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

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

appium结合sikuli的简单实践

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-2-25 16:17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
测试场景:打开myreaciton.apk,点击skip login按钮,点击“crazy fingers”菜单,选择left_hand及index_finger,开始模拟支付宝咻一咻类似的点击(10s倒计时),最后断言点击数。

1、首先建一个CapabilitiesFactory类用来定义所测的app(MyReaction.apk)
  1. package com.wiley.driver;

  2. import org.openqa.selenium.remote.DesiredCapabilities;

  3. public class CapabilitiesFactory {

  4.     protected static DesiredCapabilities capabilities;

  5.     public static DesiredCapabilities getCapabilities() throws Exception {

  6.         capabilities = new DesiredCapabilities();
  7.         capabilities.setCapability("platformName", "android");
  8.         capabilities.setCapability("deviceName", "samsung");
  9.         //以下两项可以通过appium客户端查看
  10.         capabilities.setCapability("appPackage", "com.denyszaiats.myreactions");
  11.                 capabilities.setCapability("appActivity", ".StartActivity");
  12.                 //支持中文输入
  13.                 capabilities.setCapability("unicodeKeyboard", "True");
  14.                 //重置输入法为系统默认
  15.                 capabilities.setCapability("resetKeyboard", "True");
  16.                 //安装时不对apk进行重签名,设置很有必要,否则有的apk在重签名之后无法正常使用       
  17.                 capabilities.setCapability("noSign", "True");
  18.         return capabilities;
  19.     }

  20. }
复制代码
2、其次,建一个SikuppiumDriver类,继承AppiumDriver
  1. package com.wiley.driver;

  2. import java.net.URL;
  3. import org.openqa.selenium.Capabilities;
  4. import io.appium.java_client.AppiumDriver;
  5. import io.appium.java_client.MobileElement;

  6. public class SikuppiumDriver extends AppiumDriver {

  7.     private AppiumDriver driver;

  8.     public SikuppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) {
  9.         super(remoteAddress, desiredCapabilities);
  10.     }

  11.     public void setDriver(AppiumDriver driver) {
  12.         this.driver = driver;
  13.     }

  14.     @Override
  15.     public MobileElement scrollTo(String s) {
  16.         return null;
  17.     }

  18.     @Override
  19.     public MobileElement scrollToExact(String s) {
  20.         return null;
  21.     }
  22. }
复制代码
3、测试

(1)为了方便,我们可以先建一个测试基类,如:BaseTest类

  1. package com.wiley.tests;

  2. import java.net.URL;
  3. import java.util.concurrent.TimeUnit;
  4. import org.testng.annotations.AfterMethod;
  5. import org.testng.annotations.BeforeMethod;
  6. import com.wiley.driver.CapabilitiesFactory;
  7. import com.wiley.driver.SikuppiumDriver;

  8. public class BaseTest {

  9.     protected SikuppiumDriver driver;

  10.     @BeforeMethod
  11.     public void setUp() throws Exception {
  12.         driver = new SikuppiumDriver(
  13.                 new URL("http://0.0.0.0:4723/wd/hub"),
  14.                 CapabilitiesFactory.getCapabilities()
  15.         );
  16.         driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
  17.         driver.setDriver(driver);
  18.     }

  19.     @AfterMethod
  20.     public void tearDown() {
  21.         if (driver != null) {
  22.             driver.quit();
  23.         }
  24.     }

  25. }
复制代码

(2)在正式编写代码之前,我们应该知道app元素的简单定位,可以通过sdk自带的uiautomatorviewer.bat,如下图:

比如:我们要定位Skip login这个按钮,可以通过以下方法:
(1)driver.findElementById("com.denyszaiats.myreactions:id/skip_login_button");
(2)driver.findElementByName("Skip login");
(3)driver.findElementByXpath("//android.widget.Button[1]");
更深层次的WebElement元素的操作方法,具体查看selenium webdriver2的api,此文不做具体介绍;

(3)编写测试代码,代码中有关sikuli的方法可具体查看我博客中的相关文章

  1. package com.wiley.tests;

  2. import static org.testng.Assert.assertEquals;
  3. import org.sikuli.script.FindFailed;
  4. import org.sikuli.script.Screen;
  5. import org.testng.annotations.Test;

  6. public class SampleTest extends BaseTest{

  7.     private static final String BaseId = "com.denyszaiats.myreactions:id/";
  8.     private Screen screen = new Screen();
  9.    
  10.     @Test
  11.     public void testSampleScenarioOfClicking() throws InterruptedException, FindFailed {
  12.         driver.findElementById(BaseId + "skip_login_button").click();
  13.         driver.findElementByName("Crazy Fingers").click();
  14.         driver.findElementById(BaseId + "handButton").click();
  15.         screen.click("left_hand.png");
  16.         driver.findElementById(BaseId + "fingerButton").click();
  17.         screen.click("index_finger.png");
  18.         driver.findElementById(BaseId + "startButton").click();
  19.         for (int i = 0; i < 3; i ++) {
  20.             driver.findElementById(BaseId + "imageTapButton").click();
  21.         }

  22.         String result = driver.findElementById(BaseId + "resultsFasterClicker").getText();
  23.         assertEquals(result, "3");
  24.     }
复制代码



本帖子中包含更多资源

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

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

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-23 15:20 , Processed in 0.066212 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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