我有Java语言的Appium脚本,由Appium Insecptor重新编写。
我的脚本只需要执行5个步骤:
点击用户名字段
输入用户名
点击密码字段
输入密码
点击登录按钮
我想在AWS Device Farm上运行我的脚本。
我确实按照AWS Device Farm的document修改了我的pom.xml
文件,使用Maven包mvn clean package -Dskiptests=true
将其打包,最后将zip-with-dependencies.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();
}
答案 0 :(得分:2)
我在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的视频录制功能。当测试失败时,如果有一个运行视频,它会有很大帮助。您可以在“文件”选项卡下进行检查。可能是在运行测试时设备上出现pop或其他意外事件的情况。该视频应该为您提供更多洞察力。
我建议尝试这3个更改。如果您仍然无法继续,请告诉我。
希望这有帮助。