gpt4 book ai didi

java - Appium 测试 Android 混合移动应用程序

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:36 25 4
gpt4 key购买 nike

我想自动测试在 Android 中运行的 Cordova 之上构建的基本混合移动应用程序。我为此使用了 Apppium。我关注了tutorial video开始。我下载了 Selenum、selendroid 和 java 客户端 .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;
}

}

我可以获得功能上下文。在切换窗口(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
  • Selenium :3.0.1
  • Selendroid:0.17.0

最佳答案

经过多次尝试,使用 Appium 在混合移动应用程序中进行自动化测试成功了。

基本上在Capability中,不需要设置包名和 Activity 名。而是获取应用程序包名称(.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();

关于java - Appium 测试 Android 混合移动应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41569321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com