appium:webview:selenium:如何在div上自动处理touchend事件



我想使用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

最新更新