2017-01-10 89 views
1

我想自动测试在Android中运行的Cordova之上构建的基本混合移动应用程序。我为此使用了Apppium。我跟着tutorial video开始。我下载并将Selenum,selendroid和java客户端.jar文件添加到应用程序的构建路径。Appium测试Android混合移动应用程序

下面是我的代码,

import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.Iterator; 
import java.util.Set; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 

import io.appium.java_client.AppiumDriver; 
import io.appium.java_client.MobileElement; 
import io.appium.java_client.android.AndroidDriver; 
import io.appium.java_client.remote.MobileCapabilityType; 

public class AppiumTest { 

    public static void main(String[] args) throws MalformedURLException, InterruptedException { 

     URL serverAddress = new URL("http://0.0.0.0:4723/wd/hub"); 
     WebDriver driver = new AndroidDriver<MobileElement>(serverAddress, getDesiredCapabilities()); 

     try{    
      Set<String> contextNames = ((AppiumDriver<MobileElement>) driver).getContextHandles(); 
      for (final String contextName : contextNames) { 
        System.out.println(contextName); 
        if (contextName.contains("WEBVIEW_0")) { 
         Thread.sleep(3000); 
         driver.switchTo().window("WEBVIEW_0"); 
        } 
       } 

      //Change color to Red 
      driver.findElement(By.cssSelector("p.recieved")).click(); 
      Thread.sleep(2000); 

      //Change color to Red 
      driver.findElement(By.cssSelector("recieved")).click(); 
      Thread.sleep(2000); 

      driver.get("http//appium.io/"); 
      Thread.sleep(2000); 
     } 
     finally { 
      driver.quit(); 
     } 
     System.out.println("Driver "+driver); 
    } 

    public static DesiredCapabilities getDesiredCapabilities() { 

     DesiredCapabilities capability = new DesiredCapabilities(); 

     capability.setCapability(MobileCapabilityType.AUTOMATION_NAME, "selendroid"); 
     capability.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android"); 
     capability.setCapability("platformVersion", "4.4.4"); 
     capability.setCapability("deviceName", "Android-Dev"); 
     capability.setCapability("app", 
       "C:/Joseph/Appium/HybridProject/AppiumTest/platforms/android/build/outputs/apk/android-debug.apk"); 
     capability.setCapability("appPackage", "com.joseph.appiumtest"); 
     capability.setCapability("appActivity", ".MainActivity"); 

     return capability; 
    } 

} 

我可以能够得到能力上下文。在切换窗口(driver.switchTo().window("WEBVIEW_0")),我越来越喜欢Exception in thread "main" org.openqa.selenium.WebDriverException: CATCH_ALL: java.lang.VerifyError: io/selendroid/server/model/SelendroidWebDriver

版本错误:

  • 安卓4.4.4
  • Appium:1.6.3
  • 硒:3.0.1
  • Selendroid:0.17.0

回答

0

经过大量尝试后,在混合移动应用程序中使用自动化测试g Appium工作。

基本上在Capabilities中,不需要设置包名称和活动名称。而是获取应用程序包名称(.apk)的文件路径。

 File app= new File("project/platforms/android/build/outputs/apk/android-debug.apk"); 
     DesiredCapabilities capabilities= new DesiredCapabilities(); 
     capabilities.setCapability("deviceName", "Android-Dev"); 
     capabilities.setCapability("platformVersion", "4.4.4"); 
     capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "MobilePlatform.ANDROID"); 
     capabilities.setCapability("app", app.getAbsolutePath()); 

然后,不要显式地将窗口切换到WEBVIEW。获取上下文并为应用程序设置Webview特定的动态上下文。

 try { 
      Set<String> contextNames = ((AppiumDriver) driver).getContextHandles(); 
      for (String contextName : contextNames) { 
       System.out.println(contextName); 
       if (contextName.contains("WEBVIEW")) { 
        ((AppiumDriver<MobileElement>) driver).context(contextName); 
       } 
      } 
     } 
     catch(Exception e){ 
      e.printStackTrace();    
     } 

最后用驱动程序设置,执行操作。

driver.findElement(By.xpath("//*[@id='login']")).click(); 
相关问题