Javascript android原生应用程序中的滚动问题

Javascript android原生应用程序中的滚动问题,javascript,android,scroll,appium,Javascript,Android,Scroll,Appium,我正在使用appium和java自动化我的应用程序。我需要在一个页面中滚动到一个特定的文本/元素。两天以来,我一直在挣扎,尝试了很多解决方案,但都没有效果。列出所有解决方案和方案: Appium版本:1.4.0 Java客户端版本:4.1.2 驱动程序:RemoteWebDriver 解决方案1.1: 尝试使用Java脚本。代码如下: JavascriptExecutor js = (JavascriptExecutor)driver; HashMap scrollObjects = new H

我正在使用appium和java自动化我的应用程序。我需要在一个页面中滚动到一个特定的文本/元素。两天以来,我一直在挣扎,尝试了很多解决方案,但都没有效果。列出所有解决方案和方案:

Appium版本:1.4.0 Java客户端版本:4.1.2 驱动程序:RemoteWebDriver

解决方案1.1: 尝试使用Java脚本。代码如下:

JavascriptExecutor js = (JavascriptExecutor)driver;
HashMap scrollObjects = new HashMap();
scrollObjects.put("direction", "down");
scrollObjects.put("text", "Yes");
js.executeScript("mobile: swipe", scrollObjects)
解决方案1.2:

WebElement wb = driver.findElement(By.xpath("//*[@resource-id =           'com.practo.fabric:id/toolbar']/following-sibling::android.widget.LinearLayout"));
JavascriptExecutor js = (JavascriptExecutor)driver;
HashMap scrollObjects = new HashMap();
scrollObjects.put("direction", "down");
scrollObjects.put("text", "Yes");
scrollObjects.put("element",wb);
js.executeScript("mobile: swipe", scrollObjects);
这里的问题是我没有列表视图。我有线性布局,所以我也尝试过一次提供线性布局xpath,但没有成功

解决方案2:

org.openqa.selenium.Dimension size =driver.manage().window().getSize();     
int starty = (int) (size.height * 0.80); 
int endy = (int) (size.height * 0.20);
int startx = size.width / 2; 
driver.swipe(startx, starty, startx, endy, 3000); 
System.out.println("swiping is done ");
此处driver.swipe给出错误,因为我是RemoteWebDriver。当我尝试使用AndroidDriver时,它说已弃用


在这种情况下我该怎么办

由于appium服务器和java客户端库版本不匹配,您正面临问题。请将appium server更新为1.5/1.6,否则您可以使用java客户端库版本2.1.0

如果您选择在appium 1.4中使用java-client2.1.0,我们将使用一个名为“scrollTo”的方法,该方法将滚动到特定文本。在这个组合中,我还使用了您在解决方案2中提到的“滑动”

driver.scrollTo("Like"); //Scrolls to Like text in the app

我从java客户端使用AppiumDriver解决了这个问题。当我使用最新的java客户端版本(5.0.0-BETA6)时,它说“刷卡”方法是不推荐的。但它是有效的

driver.swipe(300, 701, 300, 441, 3000);
还使用TouchAction类解决了这个问题

TouchAction action = new TouchAction(driver);   
action.press(300, 701).waitAction(2000).moveTo(300, 441).release();
action.perform();
注:坐标是硬编码的