Java Appium将测试Android混合移动应用程序
我想在Android上运行Cordova的基础上,自动测试一个基本的混合移动应用程序。我用了Apppium。我跟着他们开始了。我下载了Selenum、selendroid和java client.jar文件并将其添加到应用程序的构建路径中 下面是我的代码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
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
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();