我正在测试的应用程序是一个基于Web的应用程序。是否可以使用Appium进行测试?在他们的网站上,它指出“Appium是一个开源测试自动化框架,用于本机和混合移动应用程序。”
因此,我不确定这是否适用于我的网络应用,因为它不是原生应用或混合应用。
有人可以启发我吗?
谢谢!
答案 0 :(得分:8)
首先,您需要知道要测试的Web应用程序类型。根据{{3}}
的信息有三种类型的Web应用程序:
此外,实际上还有另一种类型的应用:混合应用,但有自定义的网页浏览。
我最近一直在努力解决这个问题,因为我无法找到并切换到webview模式。
答案 1 :(得分:3)
我发现Appium在测试移动Web应用程序时非常麻烦,因为触摸操作得不到很好的支持。从Java的角度来看,我发现与Appium交谈有两个主要选项:Selenium RemoteWebDriver和Appium 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)
答案 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