11

我正在测试的应用程序是基于 Web 的应用程序。是否可以使用 Appium 进行测试?在他们的网站上,它声明“Appium 是一个开源测试自动化框架,用于原生和混合移动应用程序。”

所以我不确定这是否适用于我的网络应用程序,因为它不是本机应用程序或混合应用程序。

有人可以启发我吗?

谢谢!

4

6 回答 6

8

首先,您需要知道要测试哪种 Web 应用程序。根据来自Saucelabs的信息

有三种类型的网络应用程序:

  1. 本机应用程序
    是的,您可以使用 Appium 进行测试,这是一种流行的移动测试工具。
  2. 混合应用程序 (Native + webview)
    是的,您可以使用 Appium 对其进行测试,但有一个小技巧,您可能需要更改上下文以切换到 webview 模式。appium.io
  3. Web 应用程序(可通过安装在移动设备上的浏览器访问的应用程序,而不是您可以下载和安装的应用程序)
    是的,详细信息也在 appium.io 上。

此外,实际上还有另一种类型的应用程序:混合应用程序,但具有自定义的 webview。
我最近一直在努力解决它,因为我很难找到并切换到 webview 模式。

于 2015-07-17T03:03:00.573 回答
6

我发现 Appium 在测试移动 Web 应用程序时非常繁琐,因为它不能很好地支持触摸动作。从 Java 的角度来看,我发现与 Appium 对话有两个主要选项:Selenium RemoteWebDriverAppium Java 客户端中的 AppiumDriver 。

Selenium RemoteWebDriver

到目前为止,我已经能够使用 selenium RemoteWebDriver 和 RemoteTouchScreen 在 Android 设备上测试我们的 Web 应用程序。使用 Selenium 3.6.0 和 Appium 1.6.5,我测试了 4 种不同的方法来单击元素:

webDriver.findElement(locator).click();
new Actions(webDriver).moveToElement(findElement(locator)).click().perform();
new RemoteTouchScreen(new RemoteExecuteMethod(webDriver)).singleTap(((Locatable)webDriver.findElement(locator)).getCoordinates());
new TouchActions(webDriver).singleTap(locator);

在 Android 上,前 3 种方法有效,但 4 种会引发“不支持”异常。我选择使用方法 1 进行点击/点击,使用方法 3 进行手势。

在 iOS 上,方法 1、2 和 4 会抛出“尚未支持”异常,而方法 3 什么也不做。由于我没有准备好花时间解决这个问题,我们现在只在 Android 上进行测试,希望 Appium 能得到改进,iOS 能得到更好的支持。

Appium Java 客户端

我对 Appium java 客户端(5.0.4 版)的体验更糟。似乎没有关于如何进行触摸操作的全面教程,只有一些代码片段在互联网上飞来飞去。所以我对这个问题的回答是尝试创建一个。

首先实例化驱动并导航到一个页面:

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "Samsung Android S8");
capabilities.setCapability("browserName", "Chrome");
capabilities.setCapability("platformName", "Android");
MobileDriver appiumDriver = new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

appiumDriver.navigate().to("https://duckduckgo.com");

然后执行一个触摸动作:

new TouchAction(appiumDriver).tap(appiumDriver.findElement(By.id("search_form_input_homepage"))).perform();

这导致:org.openqa.selenium.WebDriverException: Method has not been implemented

这个论坛帖子中,我推断我必须切换上下文才能进行触摸操作。尝试二:

appiumDriver.context("NATIVE_APP");
new TouchAction(appiumDriver).tap(appiumDriver.findElement(By.id("search_form_input_homepage"))).perform();

这样可行。但是,仅适用于 By.id 选择器。在 NATIVE_APP 上下文中,我找不到任何其他可用的选择器。由于我们网站中的大多数元素都没有 id,因此我需要一个 xpath 选择器。尝试三:

appiumDriver.context("NATIVE_APP");
new TouchAction(appiumDriver).tap(appiumDriver.findElement(By.xpath("//*[@id=\"search_form_input_homepage\"]"))).perform();

这导致:org.openqa.selenium.NoSuchElementException:使用给定的搜索参数无法在页面上找到元素。

我能想到的其他解决方法,例如在 CHROMIUM 上下文中选择 WebElement,然后将位置转移到 NATIVE_APP 上下文不是一个选项,因为坐标系不同(浏览器像素与屏幕像素)。

并且不要忘记在每次触摸操作后返回默认的 CHROMIUM 上下文。因此,唯一有效示例的完整代码变为:

try {
    appiumDriver.context("NATIVE_APP");
    new TouchAction(appiumDriver).tap(appiumDriver.findElement(By.id("search_form_input_homepage"))).perform();
} finally {
    appiumDriver.context("CHROMIUM");
}

在这一点上,我的结论是使用 Appium 测试移动 Web 应用程序还没有完成。

于 2017-10-05T13:55:00.717 回答
2

是的,我很确定你可以,看看这里:

编辑:过时的链接固定链接到appium doc

另外,这里有一个相关的问题

于 2013-10-22T13:03:44.657 回答
1

这是可能的,这里是如何在 Ruby 中为 safari 创建实例的示例:

能力= {

    :device => 'iPhone Simulator',
    :browserName => 'iOS',
    :version => '7.1',
    :platform => 'Mac',
    :app => 'safari'
  }
  $mobile_browser = Selenium::WebDriver.for(
      :remote,
      :desired_capabilities =>capabilities,
      :url => "your_server/wd/hub")

在下载 appium 并单击启动以启动 appium 服务器之前。

于 2013-12-16T22:52:24.453 回答
0

如果您在谈论移动网络应用程序,是的,您可以使用Appium来测试它们

于 2013-10-22T13:13:48.863 回答
-1

是的,Appium 可以测试原生和混合应用程序。

对于 Windows 机器,下载:Appium For Windows。对于 MAC 机器,下载:Appium dmg 文件。

Windows 需要: 只需 Appium.exe + .apk 文件(android) + 测试设备 + Android SDK 安装。

MAC 需要 Appium DMG 文件 + .app/.ipa 文件 + 测试设备 + XCODE (provisioning certificate) + ANT + ios-webkit-proxy-debug。

对于 Web 应用程序,由于它们完全基于浏览器,Appium 也适用于它们。

参考链接: https ://github.com/appium/appium/blob/master/docs/mobile-web.md

于 2014-02-14T04:51:27.220 回答