Appium如何在WebView中进行水平滑动

时间:2017-09-06 22:37:45

标签: android ionic-framework appium

我使用5.0.2 Java-client for Appium但我无法使用此功能执行水平滑动:

User.find(id)

我在Android上自动化Ionic应用程序。 有人知道我怎么做Swipe?

注意: 我将上下文切换为touchAction.press(startX, startY).moveTo(endX, startY).release().perform();以与应用互动,然后我返回WEBVIEW上下文以使用NATIVE_APP

3 个答案:

答案 0 :(得分:0)

我用' driver.swipe'做了这件事,使用网络应用程序,touchAction对我不起作用......

Python代码:

# Screen movement is left -> right (element is hidden at the right of the screen)
# I have a list of items (all the same) and I move 1 by 1
startX = selected.size['width']
# 'Y' coordinate in this case is the middle of the element
startY = selected.location['y'] + (selected.size['height']/2)
# This will move from startX, startY, to 1, startY in a duration of 400
driver.swipe(startX , startY, 1, startY , 400)

# Screen movement is right -> left (element is hidden at the left of the screen)
driver.swipe(1, startY, startX, startY , 400)

仅供记录...正如我所说,它对我来说不适用于touchAction,而对于touchAction,它不像:

driver.swipe(startX , startY, 1, startY...)

就像

touchAction.press(startX, startY).move_to((startX*-1), 0).release().perform() 

这只是为了考虑这是累积的......你move_to尊重你所按的地方......

我的意思是,你没有指定你要移动到的坐标...你从原点(startX和startY)指定,从这些坐标水平和垂直移动多少...... < / p>

我想在Java中会是这样的:

# You can change swipe duration to whatever value you want (Milliseconds)
# Screen movement is left -> right 
driver.swipe(startX, startY, 1, startY, 400);
# Screen movement is right -> left
driver.swipe(1, startY, startX, startY, 400);

答案 1 :(得分:0)

我能够刷卡注入css样式:

int width = ((Long) js.executeScript("return window.innerWidth || document.body.clientWidth")).intValue();
js.executeScript("arguments[0].style.cssText = \"position: absolute; left: -"+ width+"px;\";", element);

不确定这是否正确但对我有用。

此外,使用css转换工作:

js.executeScript("arguments[0].style.cssText = \"position: absolute; transform: translateX(-100%)\";", element);

答案 2 :(得分:0)

我以前遇到过类似的问题,并采取了以下步骤来解决问题。

  1. 请确保您选择的开始和结束坐标位于屏幕的可滚动区域。

  2. 此外,请尝试使用新的TouchAction实例,而不是使用现有的TouchAction实例。我还没有找到解释为什么这对我有用。

    new TouchAction(driver).press(startX,startY).moveTo(endX,startY)。release()。perform();