【问题标题】:Can I use appium for testing web apps?我可以使用 appium 来测试网络应用吗?
【发布时间】:2013-10-25 03:21:29
【问题描述】:

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

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

谁能启发我?

谢谢!

【问题讨论】:

    标签: appium


    【解决方案1】:

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

    编辑:修复了过时的链接link to appium doc

    还有一个相关问题here

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这是可能的,这里是如何在 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之前点击launch启动appium服务器。

      【讨论】:

      • 这行不通。浏览器名称必须是 safari,并且您必须切换到 WEBVIEW 上下文才能使用 web。
      【解决方案4】:

      是的,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

      【讨论】:

        【解决方案5】:

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

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

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

        此外,实际上还有另一种应用程序:混合应用程序,但具有自定义的 webview。
        我最近一直在苦苦挣扎,因为我无法找到并切换到 webview 模式。

        【讨论】:

          【解决方案6】:

          我发现 Appium 在测试移动 Web 应用程序时非常麻烦,因为它不能很好地支持触摸动作。从 Java 的角度来看,我发现与 Appium 通信有两个主要选项:Selenium RemoteWebDriver 和来自Appium Java client 的 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 版)的体验更糟。似乎没有关于如何进行触摸动作的全面教程,只有一些代码 sn-ps 在互联网上飞来飞去。所以我对这个问题的回答是尝试创建一个。

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

          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

          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 应用程序还没有完成。

          【讨论】:

            猜你喜欢
            • 2015-07-25
            • 2019-01-11
            • 2016-02-10
            • 2015-11-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-17
            相关资源
            最近更新 更多