我正在测试的应用程序是基于 Web 的应用程序。是否可以使用 Appium 进行测试?在他们的网站上,它声明“Appium 是一个开源测试自动化框架,用于原生和混合移动应用程序。”
所以我不确定这是否适用于我的网络应用程序,因为它不是本机应用程序或混合应用程序。
有人可以启发我吗?
谢谢!
我正在测试的应用程序是基于 Web 的应用程序。是否可以使用 Appium 进行测试?在他们的网站上,它声明“Appium 是一个开源测试自动化框架,用于原生和混合移动应用程序。”
所以我不确定这是否适用于我的网络应用程序,因为它不是本机应用程序或混合应用程序。
有人可以启发我吗?
谢谢!
首先,您需要知道要测试哪种 Web 应用程序。根据来自Saucelabs的信息
有三种类型的网络应用程序:
此外,实际上还有另一种类型的应用程序:混合应用程序,但具有自定义的 webview。
我最近一直在努力解决它,因为我很难找到并切换到 webview 模式。
我发现 Appium 在测试移动 Web 应用程序时非常繁琐,因为它不能很好地支持触摸动作。从 Java 的角度来看,我发现与 Appium 对话有两个主要选项:Selenium RemoteWebDriver和Appium 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 应用程序还没有完成。
这是可能的,这里是如何在 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来测试它们
是的,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