我可以使用appium来测试网络应用吗?

时间:2013-10-16 20:23:46

标签: appium

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

因此,我不确定这是否适用于我的网络应用,因为它不是原生应用或混合应用。

有人可以启发我吗?

谢谢!

6 个答案:

答案 0 :(得分:8)

首先,您需要知道要测试的Web应用程序类型。根据{{​​3}}

的信息

有三种类型的Web应用程序:

  1. 原生申请
    是的,您可以使用Appium进行测试,Appium是一种流行的移动测试工具。
  2. 混合应用程序(Native + webview)
    是的,您可以使用Appium进行测试,但有一点技巧可能需要更改上下文以切换到webview模式。 Saucelabs
  3. 网络应用(可从移动设备上安装的浏览器访问的应用,而不是您可以下载和安装的应用) 是的,细节也在appium.io。
  4. 此外,实际上还有另一种类型的应用:混合应用,但有自定义的网页浏览。
    我最近一直在努力解决这个问题,因为我无法找到并切换到webview模式。

答案 1 :(得分:3)

我发现Appium在测试移动Web应用程序时非常麻烦,因为触摸操作得不到很好的支持。从Java的角度来看,我发现与Appium交谈有两个主要选项:Selenium RemoteWebDriverAppium Java client中的AppiumDriver。

Selenium RemoteWebDriver

到目前为止,我已经能够使用selenium RemoteWebDriver和RemoteTouchScreen在Android设备上测试我们的网络应用程序。使用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:方法尚未实现

this forum post我推断出我必须切换上下文以便能够执行触摸操作。尝试二:

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应用程序尚不存在。

答案 2 :(得分:2)

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

编辑:过期的链接已修复link to appium doc

另外,相关问题here

答案 3 :(得分:1)

以下是如何在Ruby中创建safari实例的示例:

  

capabilities = {

    :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服务器。

答案 4 :(得分:0)

如果您正在谈论移动网络应用,是的,您可以使用Appium进行测试

答案 5 :(得分:-1)

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

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

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

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

对于Web应用程序,由于它们纯粹基于浏览器,因此Appium也可以很好地使用它们。

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