我想使用appium自动化一个混合应用程序。我的应用程序使用触摸端事件而不是div的点击事件我如何在appium中自动处理这个触摸端事件?
对于简单的点击,我可以找到一个元素,然后通过简单地执行WebElement.click();
来执行点击
如何为触摸端触发事件?
过去几天我一直在研究同样的问题。最终,我发现Appium触摸操作只适用于NATIVE上下文。但是,当您测试/自动化web应用程序时,您处于WEBVIEW上下文中。所以你必须切换到NATIVE,执行触摸动作,然后切换回来。
好吧,听起来还不错。但他们不能让事情变得那么简单。因此,您不能在触摸操作中使用Selenium WebElement作为参数。你要么必须使用NATIVE上下文重新找到它,要么使用元素的位置和尺寸来计算触摸位置并使用它。但是,NATIVE上下文中的X和Y坐标与WEBVIEW上下文中的坐标不同。所以,如果你需要它们是准确的,那么你必须翻译它们。
好吧,至少我现在就是这样。也许其他人可以提供更多或更好的细节。
以下是点击的一些示例代码,它忽略了像素转换问题。我只在iOS上测试过,但它应该也能在Android上使用。
private void tapElement(AppiumDriver appiumDriver, WebElement element) {
// Locate center of element
Point location = element.getLocation();
Dimension size = element.getSize();
int tapX = location.getX() + (size.getWidth() / 2);
int tapY = location.getY() + (size.getHeight() / 2);
// Execute tap
String originalContext = appiumDriver.getContext();
appiumDriver.context("NATIVE_APP");
TouchAction action = new TouchAction(appiumDriver);
action.tap(tapX, tapY).perform();
appiumDriver.context(originalContext);
}
您看过文档吗?
https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/touch-actions.md