我有Java语言的Appium脚本,由Appium Insecptor记录。
我的脚本将只执行 5 个步骤:
点击用户名字段
输入用户名
点击密码字段
输入密码
点击登录按钮
我想在 AWS Device Farm 上运行我的脚本。
我确实遵循了document AWS Device Farm 修改我的 pom.xml
文件,使用 Maven 包 mvn clean package -Dskiptests=true
进行打包,最后上传 zip-with- dependency.zip
到 AWS Device Farm。
但是我的测试未能运行。 这是结果截图
我不知道我在哪里犯了错误,导致 AWS 无法运行我的脚本。
这是我记录的,
package com.hostname.myapp;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
public class AppiumTest {
private static AppiumDriver<AndroidElement> wd;
@BeforeClass
public static void setUpClass() throws MalformedURLException {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("appium-version", "1.0");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "5.0.2");
capabilities.setCapability("deviceName", "XXXXXXXXXXXX");
capabilities.setCapability("app", "/Users/X/X.apk");
capabilities.setCapability("appPackage", "com.hostname.myapp");
wd = new AndroidDriver<AndroidElement>(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
wd.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
}
@AfterClass
public static void tearDownClass() {
if (wd != null) {
wd.quit();
}
}
@Test
public void test() throws IOException {
wd.findElement(By.xpath("android.widget.EditText[1]")).click();
wd.findElement(By.xpath("android.widget.EditText[1]")).sendKeys("username");
wd.findElement(By.xpath("android.widget.EditText[2]")).click();
wd.findElement(By.name("Android.widget.EditText[2]")).sendKeys("password");
wd.findElement(By.xpath("android.widget.Button[1]")).click();
wd.close();
}
最佳答案
我在 AWS Device Farm 团队工作。
感谢您提供详细信息。这有帮助。
解决方案
所需功能:设备场会忽略您已使用的所需功能。由于您在设备场中单独上传应用程序并在安排运行时选择设备,因此您在代码中使用的设备类型、名称和其他功能将不会得到尊重,并且依赖于它的任何代码很可能都将无法工作。 创建一个空的所需功能对象并将其传递给 AndroidDriver 构造函数将是实现此目的的理想方法。
Android 驱动程序:您使用的代码
wd = new AndroidDriver<AndroidElement>(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
应该是
wd = new AndroidDriver<AndroidElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
视频:我们为 iOS 和 Android 提供视频录制功能。当测试失败时,如果有该次运行的视频,将会有很大帮助。您可以在"file"选项卡下进行检查。运行测试时可能会出现设备上出现弹出消息或其他意外事件的情况。该视频应该能让您对这种情况有更多的了解。
我建议尝试这 3 个改变。如果您仍然无法继续,请告诉我。
希望这有帮助。
关于Java Appium 测试无法在 AWS Device Farm 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39221825/