【问题标题】:How to scroll to specific element inLatest version of Appium using Java?如何使用 Java 滚动到最新版本的 Appium 中的特定元素?
【发布时间】:2018-10-22 14:26:13
【问题描述】:

我的元素在屏幕上不可见,但是当我使用 .isDisplayed() 方法时,我的代码如下所示

Point xy = send_mail.getCoordinates().onScreen();
        int a=xy.getX();
        int b =xy.getY();
        System.out.println("a" + xy.getX() + "b" + xy.getY());
        TouchAction touchAction = new TouchAction(driver);
        touchAction.moveTo(a, b);

send_mail 是要找到的元素的 xpath。这是跟踪日志帮助!我不能使用 while 循环进行迭代,直到元素不显示,因为它认为它是可见的 y appium。

java.lang.UnsupportedOperationException: Not supported yet.
    at org.openqa.selenium.remote.RemoteWebElement$1.onScreen(RemoteWebElement.java:402)
    at testcases.TestcaseFunctionsAndroid.offlinesearchservice(TestcaseFunctionsAndroid.java:764)
    at testcases.TestCasesAndroid.TC9(TestCasesAndroid.java:279)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:639)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:816)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1124)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
    at org.testng.TestRunner.privateRun(TestRunner.java:774)
    at org.testng.TestRunner.run(TestRunner.java:624)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
    at org.testng.SuiteRunner.run(SuiteRunner.java:261)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
    at org.testng.TestNG.run(TestNG.java:1048)
    at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

【问题讨论】:

  • 我只想滚动到特定元素并且该元素没有 id 或可访问性 id。它有我试图找到它的xpath。任何积极的帮助表示赞赏。我也尝试过 uiautomator 脚本,该脚本主要由提供的其他解决方案使用,但无法做到。

标签: java android scroll appium android-uiautomator


【解决方案1】:

试试这个:

以下是获取特定元素坐标的方法:

public int[] getCoordinates(String xpath, AndroidDriver<AndroidElement> driver) throws Exception {
         //Locate element for which you wants to retrieve x y coordinates.
        //int arr[] ;
         int arr[] = new int[10];
         //Get the middle co-ordinates of the element and store in  the array.
         WebElement element = driver.findElementByXPath(xpath);
         int leftX = element.getLocation().getX();
         int rightX = leftX + element.getSize().getWidth();
         int middleX = (rightX + leftX) / 2;
         int upperY = element.getLocation().getY();
         int lowerY = upperY + element.getSize().getHeight();
         int middleY = (upperY + lowerY) / 2;
         System.out.println("x co-ordinat: "+middleX+"\n y co-ordinat: "+middleY+"\n left x axis: "+leftX+"\n right x: "+rightX);
         arr[0]= middleX;
         arr[1]= middleY;
         arr[2]= rightX;
         arr[3]= leftX;
         return arr;
         }

然后使用:

            int[] co_ordinates = takeaway.getCoordinates(Xpath of from Element  , driver);
            System.out.println(" x cordinate: " + co_ordinates[0] + "\n y cordinat: " + co_ordinates[1]);
            int[] dinates = takeaway.getCoordinates(Xpath of To Element, driver);
            TouchAction touch = new TouchAction(driver);
            touch.longPress(co_ordinates[0], co_ordinates[1]).moveTo(dinates[0], dinates[1]).release().perform();

【讨论】:

  • 您好,我先尝试了这个,但它不起作用。您知道它会在列表中找到该元素,因此它不会滚动,并且会单击屏幕上可见的最后一个元素,而不是滚动到该元素。
  • 表示您要滑动特定元素?
  • 是的,我需要这样做,而且这太动态了。问题是我的应用没有 ids 只需要与 xpath 相关...
  • 我已经更新了答案...请试试这个并告诉我发生了什么?
  • 谢谢,我会尽力让你知道的。感谢您的帮助。
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 2019-10-08
  • 2013-02-28
  • 2022-10-14
相关资源
最近更新 更多