运行 使用 Appium 实现 Web 应用程序自动化的步骤
Steps to run web application automation using Appium
我在尝试使用 appium 通过物理 Android 设备对 运行 进行自动化测试时遇到了很多麻烦。我不太擅长使用 cmd 和配置,并且很少有关于将其设置为 运行 网络应用程序的教程。这是我的
- Java 中编码的 Intellij 自动化项目。测试是 运行 通过 testng xml 文件并同步到 browserstack。
- 我已经下载了 Appium。
- 我已经在路径中设置了 ANDROID_HOME 变量
- 我连接了一个设备,输入adb devices就可以看到了
我认为我拥有我需要的大部分东西,但我不知道要采取的步骤或如何通过我的 phone 将所需的功能更改为 运行!拜托,我知道这是一个广泛的问题,但如果有人可以就如何实现这一目标发表一些见解,我将永远感激不已。谢谢!下面是我如何在 xml 文件中设置测试的示例。
<test name="Standard Ad Regression">
<parameter name="browserName" value="Android"/>
<parameter name="device" value="Samsung Galaxy S5"/>
<parameter name="emulator" value="true"/>
<parameter name="browser_version" value=""/>
<parameter name="platform" value="ANDROID"/>
<parameter name="local" value="true"/>
<parameter name="baseUrl" value="https://mywebsite.com/"/>
<parameter name="os" value="os"/>
<parameter name="os_version" value="4.4"/>
<parameter name="resolution" value="1024x768"/>
<parameter name="bsAccount" value="http://myusername:BcB9786AAvEoa45Fj@hub.browserstack.com/wd/hub"/>
<classes>
<class name="com.testsuites.regression.TestThis"/>
</classes>
</test>
这是一个非常笼统的问题,但我已经完全按照您的意愿做了。
- 将 Selenium 和 Appium Jar 添加到 Java 项目
- 编写您的 Java 测试脚本并初始化 AndroidDriver:
我正在使用单独的方法来获取驱动程序。我这样做的原因是,当我将测试并行扩展到 运行 时,我不需要重新设计。
public static AndroidDriver getDriver(String udid) throws MalformedURLException{
String URL = "XXXX";
ThreadLocal<AndroidDriver> driver = null;
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("device", udid);
capabilities.setCapability("deviceName", udid);
capabilities.setCapability("udid", udid);
capabilities.setPlatform(Platform.ANDROID);
capabilities.setCapability("browserName", "Chrome");
try {
driver = new ThreadLocal<AndroidDriver>();
driver.set(new AndroidDriver(new URL(URL),
capabilities));
} catch (MalformedURLException e) {
System.out.println("Tackle Issue with RemoteDriverSetup");
}
driver.get().manage().timeouts()
.pageLoadTimeout(20L, TimeUnit.SECONDS);
driver.get().manage().timeouts()
.implicitlyWait(20L, TimeUnit.SECONDS);
return driver.get();
}
- 创建你的testNG.xml
我只是通过这个文件传递设备的 UDID,我看到你使用了多个参数,这也很好。
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
<test name="Nexus 7">
<parameter name="udid" value="XXXX" />
<classes>
<class name="testNG.TestOne"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
- 启动 Appium 服务器
使用 GUI 只需按下按钮,确保使用的 URL 与用于初始化 AndroidDriver 的相同。
- 右键单击 testNG 并 运行 作为测试套件。
如果您有任何问题,运行 Appium doctor 并确保一切安装正确。
希望这对您有所帮助,
利亚姆
// Switch to WebView
Set<String> contextNames = driver.getContextHandles();
System.out.println(contextNames.size());
for (String contextName : contextNames) {
System.out.println(contextName);
if (contextName.contains("WEBVIEW")){
driver.context(contextName);
}
}
然后,一旦您切换到 webview,您就可以以相同的方式使用 appium API,但现在它们将与 webview 交互。
我在尝试使用 appium 通过物理 Android 设备对 运行 进行自动化测试时遇到了很多麻烦。我不太擅长使用 cmd 和配置,并且很少有关于将其设置为 运行 网络应用程序的教程。这是我的
- Java 中编码的 Intellij 自动化项目。测试是 运行 通过 testng xml 文件并同步到 browserstack。
- 我已经下载了 Appium。
- 我已经在路径中设置了 ANDROID_HOME 变量
- 我连接了一个设备,输入adb devices就可以看到了
我认为我拥有我需要的大部分东西,但我不知道要采取的步骤或如何通过我的 phone 将所需的功能更改为 运行!拜托,我知道这是一个广泛的问题,但如果有人可以就如何实现这一目标发表一些见解,我将永远感激不已。谢谢!下面是我如何在 xml 文件中设置测试的示例。
<test name="Standard Ad Regression">
<parameter name="browserName" value="Android"/>
<parameter name="device" value="Samsung Galaxy S5"/>
<parameter name="emulator" value="true"/>
<parameter name="browser_version" value=""/>
<parameter name="platform" value="ANDROID"/>
<parameter name="local" value="true"/>
<parameter name="baseUrl" value="https://mywebsite.com/"/>
<parameter name="os" value="os"/>
<parameter name="os_version" value="4.4"/>
<parameter name="resolution" value="1024x768"/>
<parameter name="bsAccount" value="http://myusername:BcB9786AAvEoa45Fj@hub.browserstack.com/wd/hub"/>
<classes>
<class name="com.testsuites.regression.TestThis"/>
</classes>
</test>
这是一个非常笼统的问题,但我已经完全按照您的意愿做了。
- 将 Selenium 和 Appium Jar 添加到 Java 项目
- 编写您的 Java 测试脚本并初始化 AndroidDriver:
我正在使用单独的方法来获取驱动程序。我这样做的原因是,当我将测试并行扩展到 运行 时,我不需要重新设计。
public static AndroidDriver getDriver(String udid) throws MalformedURLException{
String URL = "XXXX";
ThreadLocal<AndroidDriver> driver = null;
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("device", udid);
capabilities.setCapability("deviceName", udid);
capabilities.setCapability("udid", udid);
capabilities.setPlatform(Platform.ANDROID);
capabilities.setCapability("browserName", "Chrome");
try {
driver = new ThreadLocal<AndroidDriver>();
driver.set(new AndroidDriver(new URL(URL),
capabilities));
} catch (MalformedURLException e) {
System.out.println("Tackle Issue with RemoteDriverSetup");
}
driver.get().manage().timeouts()
.pageLoadTimeout(20L, TimeUnit.SECONDS);
driver.get().manage().timeouts()
.implicitlyWait(20L, TimeUnit.SECONDS);
return driver.get();
}
- 创建你的testNG.xml
我只是通过这个文件传递设备的 UDID,我看到你使用了多个参数,这也很好。
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
<test name="Nexus 7">
<parameter name="udid" value="XXXX" />
<classes>
<class name="testNG.TestOne"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
- 启动 Appium 服务器
使用 GUI 只需按下按钮,确保使用的 URL 与用于初始化 AndroidDriver 的相同。
- 右键单击 testNG 并 运行 作为测试套件。
如果您有任何问题,运行 Appium doctor 并确保一切安装正确。
希望这对您有所帮助,
利亚姆
// Switch to WebView
Set<String> contextNames = driver.getContextHandles();
System.out.println(contextNames.size());
for (String contextName : contextNames) {
System.out.println(contextName);
if (contextName.contains("WEBVIEW")){
driver.context(contextName);
}
}
然后,一旦您切换到 webview,您就可以以相同的方式使用 appium API,但现在它们将与 webview 交互。