• selenium 有 waitforelement 的方法,想办法把这个方法封装成 appium 能用。
    然后在定义一个 waittime 变量,测试脚本再读取这个 waittime 变量。

    waittime=10
    
    try:
        element = WebDriverWait(driver, waittime).until(
            EC.presence_of_element_located((By.ID, "myDynamicElement"))
        )
    finally:
        driver.quit()
    

    下面是 java 代码。

    private boolean waitElementToBeDisplayed(final WebElement element) {
        boolean wait = false;
        if (element == null)
            return wait;
        try {
            wait = new WebDriverWait(driver, Integer.parseInt(Config
                    .getConfig("waitTime")))
                    .until(new ExpectedCondition<Boolean>() {
                        public Boolean apply(WebDriver d) {
                            return element.isDisplayed();
                        }
                    });
        } catch (Exception e) {
            System.out.println(element.toString() + " is not displayed");
        }
        return wait;
    }
    
  • iOS 7.x 无法用 SWIPE。
    除非 swipe 起点是可拖动的物件。
    如果基于截图的 app,只能用 scroll 的方法,swipe 用不了。

  • 手机游戏如何做测试 at 2014年07月04日

    #4 楼 @seveniruby
    这个工具好用么?
    我正在按照官方的 pdf,设置范例试试。

  • 手机游戏如何做测试 at 2014年07月04日

    它有个 demo video 是展示游戏的,但不是复杂的游戏。
    据说,这东东对测试游戏比较在行。

  • 手机游戏如何做测试 at 2014年07月04日

    TouchTest Lite
    妳会有惊喜。

  • aapt 工具 android sdk 的 tools 文件夹下,自带的工具。
    把 [Android_sdkPath]/sdk/tools 添加到环境变量中,整个 shell 或批处理。

    #!/bin/bash
    set +x
    
    binary_name=$1
    
    pkg=$(aapt dump badging ${binary_name}|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
    act=$(aapt dump badging ${binary_name}|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')
    
    echo ${pkg}
    echo ${act}
    
  • aapt dump

  • 楼主能否分享下 pom.xml 和 testng.xml?

  • 在广州 UC 吃过一次午饭,和百度是一座楼的。
    可惜 UC 看不上我...

  • 使用 id 定位是在 webview 中的吧,我说的是 By.id

  • 税重。
    问: 实拿薪资/税前薪资 = ?%

  • appium1.1 发布 at 2014年05月29日

    更新 dmg 试试

  • #2 楼 @lihuazhang
    建私服,减低下载包时由网络问题造成的错误率。

  • 干嘛不用 maven 管理第三方 API

  • 不敢投......

  • #14 楼 @tspring
    我会使用 while 循环去判断了,附加一个间隔时间,设一个等待时间。

    一般我会加一个 app 是否成功开启的一个方法,先来一个确定。
    如果连 app 都没有成功打开,谈何测试。

  • android 截屏 at 2014年05月22日

    我想说的是,请多研究官方的例子。
    下面是从官方例子抄来的。

    https://github.com/appium/appium/blob/master/sample-code/examples/python/ios_complex.py

    def test_screenshot(self):
            # make screenshot and get is as base64
            screenshot = self.driver.get_screenshot_as_base64()
            self.assertTrue(screenshot)
    
            # make screenshot and save it to the local filesystem
            success = self.driver.get_screenshot_as_file("foo.png")
            self.assertTrue(success)
            self.assertTrue(os.path.isfile("foo.png"))
    
            # get rid of the file
            os.remove("foo.png")
    
  • #40 楼 @tomzhangc
    找 Google

  • #8 楼 @tspring
    是的,使用 maven 管理第三方 jar 包/库很省事。
    我也提供一个我自己能跑的 java 代码,使用的是 testng,appium 1.0,很简单的。
    重构一下,更好。

    package com.xx;
    
    import org.openqa.selenium.Alert;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.remote.CapabilityType;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    import io.appium.java_client.AppiumDriver;
    import io.appium.java_client.TouchAction;
    
    import java.io.File;
    import java.net.URL;
    import java.util.ArrayList;
    
    import org.testng.annotations.BeforeMethod;
    import org.testng.annotations.AfterMethod;
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.BeforeClass;
    import org.testng.annotations.AfterClass;
    import org.testng.annotations.BeforeTest;
    import org.testng.annotations.AfterTest;
    import org.testng.annotations.BeforeSuite;
    import org.testng.annotations.AfterSuite;
    import org.testng.annotations.Test;
    
    
    public class Demo {
    
        private AppiumDriver driver;
    
      @Test
      public void f() throws InterruptedException {
          WebElement ctn = driver.findElementByName("Continue");
          TouchAction action = new TouchAction(driver);
    
          action.press(ctn).perform();
          Thread.sleep(3);            // sleep for debugging
    
          int X = driver.manage().window().getSize().getWidth();
          int Y = driver.manage().window().getSize().getHeight();
    
          int sX = (int) (X * 0.9);
          int sY = (int) (Y * 0.5);
          int eX = (int) (X * 0.05);
          int eY = sY;
          int duration = 2000;
          driver.swipe(sX, sY, eX, eY, duration);      //swipe function is broken in iOS 7.x simulator by Apple
           Thread.sleep(3000);      // sleep for debugging
      }
    
      @BeforeMethod
      public void setUp() throws Exception {
          // set up appium    
          File appDir = new File("/app/Testing_App");
          File app = new File(appDir, "xxx.app");
          DesiredCapabilities capabilities = new DesiredCapabilities();
          capabilities.setCapability(CapabilityType.BROWSER_NAME, "iOS");
          capabilities.setCapability("device", "iOS");
          capabilities.setCapability(CapabilityType.VERSION, "7.1");
          capabilities.setCapability(CapabilityType.PLATFORM, "Mac");
          capabilities.setCapability("app", app.getAbsolutePath());
          driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
    
      }
    
      @AfterMethod
      public void teardown() {
          driver.quit();
      }
    
    
    
    }