我可以使用appium测试web应用程序吗?

我可以使用appium测试web应用程序吗?,appium,Appium,我正在测试的应用程序是一个基于web的应用程序。是否可以使用Appium来测试这一点?在他们的网站上声明“Appium是一个开源的测试自动化框架,用于本地和混合移动应用程序。” 因此,我不确定这是否适用于我的web应用程序,因为它不是本地应用程序或混合应用程序 有人能启发我吗 谢谢 是的,我相信你可以,看看这里: 编辑:过时的链接已修复 另外,还有一个相关问题如果您谈论的是移动web应用程序,那么您可以使用它来测试它们这是可能的,下面是如何在Ruby中创建safari实例的示例: 能力={

我正在测试的应用程序是一个基于web的应用程序。是否可以使用Appium来测试这一点?在他们的网站上声明“Appium是一个开源的测试自动化框架,用于本地和混合移动应用程序。”

因此,我不确定这是否适用于我的web应用程序,因为它不是本地应用程序或混合应用程序

有人能启发我吗


谢谢

是的,我相信你可以,看看这里:

编辑:过时的链接已修复


另外,还有一个相关问题

如果您谈论的是移动web应用程序,那么您可以使用它来测试它们

这是可能的,下面是如何在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服务器。

是的,appium可以同时测试本机和混合应用程序

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

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

MAC需要 Appium DMG文件+.app/.ipa文件+测试设备+XCODE(配置证书)+ANT+ios webkit代理调试

对于Web应用程序,由于它们完全基于浏览器,Appium也能很好地应用于它们

链接供参考:

首先,您需要知道要测试哪种web应用程序

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

  • 本机应用程序
    是的,您可以使用Appium进行测试,Appium是一种流行的移动测试工具
  • 混合应用程序(本机+网络视图)
    是的,您可以使用Appium进行测试,但有一个小技巧,您可能需要更改上下文以切换到webview模式
  • Web应用程序(可从安装在移动设备上的浏览器访问的应用程序,而不是您可以下载和安装的应用程序)
    是的,详细信息也在appium.io上
  • 此外,实际上还有另一种类型的应用程序:混合应用程序,但具有定制的网络视图。

    我最近一直在努力解决这个问题,因为我很难找到并切换到webview模式。

    我发现Appium在测试移动web应用程序时非常麻烦,因为触摸操作没有得到很好的支持。从Java的角度来看,我发现与Appium对话有两个主要选项:和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");
    
    这导致:org.openqa.selenium.WebDriverException:方法尚未实现

    根据我的推断,我必须切换上下文才能进行触摸动作。尝试二:

    appiumDriver.context("NATIVE_APP");
    new TouchAction(appiumDriver).tap(appiumDriver.findElement(By.id("search_form_input_homepage"))).perform();
    
    这是可行的。但是,仅适用于By.id选择器。我找不到任何其他选择器在本机应用程序上下文中有效。而且,由于我们网站中的大多数元素都缺少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,然后将位置转移到本机应用程序上下文中,这不是一个选项,因为坐标系不同(浏览器像素与屏幕像素)

    并且不要忘记在每次触摸操作后返回默认的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应用程序还没有完成。

    指向github的链接已断开,请修复。请参阅此官方文档:这将不起作用。浏览器名称必须是safari,您必须切换到WEBVIEW上下文才能使用web。
    try {
        appiumDriver.context("NATIVE_APP");
        new TouchAction(appiumDriver).tap(appiumDriver.findElement(By.id("search_form_input_homepage"))).perform();
    } finally {
        appiumDriver.context("CHROMIUM");
    }