Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Appium将测试Android混合移动应用程序_Java_Android_Cordova_Selenium_Appium - Fatal编程技术网

Java Appium将测试Android混合移动应用程序

Java Appium将测试Android混合移动应用程序,java,android,cordova,selenium,appium,Java,Android,Cordova,Selenium,Appium,我想在Android上运行Cordova的基础上,自动测试一个基本的混合移动应用程序。我用了Apppium。我跟着他们开始了。我下载了Selenum、selendroid和java client.jar文件并将其添加到应用程序的构建路径中 下面是我的代码 import java.net.MalformedURLException; import java.net.URL; import java.util.Iterator; import java.util.Set; import org.o

我想在Android上运行Cordova的基础上,自动测试一个基本的混合移动应用程序。我用了Apppium。我跟着他们开始了。我下载了Selenum、selendroid和java client.jar文件并将其添加到应用程序的构建路径中

下面是我的代码

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;
    }

}
import java.net.MalformedURLException;
导入java.net.URL;
导入java.util.Iterator;
导入java.util.Set;
导入org.openqa.selenium.By;
导入org.openqa.selenium.WebDriver;
导入org.openqa.selenium.remote.DesiredCapabilities;
导入io.appium.java_client.AppiumDriver;
导入io.appium.java_client.MobileElement;
导入io.appium.java_client.android.AndroidDriver;
导入io.appium.java_client.remote.MobileCapabilityType;
公共类应用程序测试{
publicstaticvoidmain(字符串[]args)抛出畸形的durlexception、InterruptedException{
URL服务器地址=新的URL(“http://0.0.0.0:4723/wd/hub");
WebDriver driver=新的AndroidDriver(服务器地址,getDesiredCapabilities());
试试{
设置contextNames=((AppiumDriver)驱动程序).getContextHandles();
for(最终字符串contextName:contextName){
System.out.println(contextName);
if(contextName.contains(“WEBVIEW_0”)){
睡眠(3000);
driver.switchTo()窗口(“WEBVIEW_0”);
}
}
//把颜色改成红色
driver.findElement(通过.cssSelector(“p.received”))。单击();
《睡眠》(2000年);
//把颜色改成红色
driver.findElement(By.cssSelector(“received”)。单击();
《睡眠》(2000年);
get(“http//appium.io/”;
《睡眠》(2000年);
}
最后{
driver.quit();
}
系统输出打印项次(“驱动程序”+驱动程序);
}
公共静态DesiredCapabilities getDesiredCapabilities(){
DesiredCapabilities=新的DesiredCapabilities();
capability.setCapability(MobileCapabilityType.AUTOMATION_名称,“selendroid”);
setCapability(MobileCapabilityType.PLATFORM_NAME,“Android”);
能力。设置能力(“平台版”、“4.4.4”);
setCapability(“deviceName”、“Android开发”);
setCapability(“应用程序”,
“C:/Joseph/Appium/HybridProject/AppiumTest/platforms/android/build/outputs/apk/android debug.apk”);
capability.setCapability(“appPackage”、“com.joseph.appiumtest”);
capability.setCapability(“appActivity”、“MainActivity”);
返回能力;
}
}
我可以获得功能上下文。在切换窗口(
driver.switchTo().window(“WEBVIEW\u 0”)
)时,我在线程“main”org.openqa.selenium.webdrivexception:CATCH\u ALL:java.lang.VerifyError:io/selendroid/server/model/SelendroidWebDriver

版本:

  • 安卓:4.4.4
  • 附件:1.6.3
  • 硒:3.0.1
  • Selendroid:0.17.0

经过多次尝试,使用Appium实现了混合移动应用的自动化测试

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

然后不要显式地将窗口切换到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();            
        }

经过多次尝试,使用Appium实现了混合移动应用的自动化测试

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

然后不要显式地将窗口切换到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();