【问题标题】:Unable to scroll down page on Android device无法在 Android 设备上向下滚动页面
【发布时间】:2016-11-18 17:49:58
【问题描述】:

我无法在使用 appium 的 android 设备上的移动页面中向下滚动。我试过 driver.scrollTo(element) ,它没有向下滚动到指定的元素。 我曾尝试使用 Actions 类,但出现错误,因为“方法尚未实现” 我尝试过使用 Javascript 的另一种方法,但它也不起作用。 有人提出建议。

代码如下:

public static void main(String[] args) throws IOException, InterruptedException {
        DesiredCapabilities cap = new DesiredCapabilities();

        cap.setCapability(CapabilityType.BROWSER_NAME, "Android"); //Name of mobile web browser to automate. Should be an empty string if automating an app instead.
        cap.setCapability(CapabilityType.VERSION, "6.0.1");
        cap.setCapability(CapabilityType.PLATFORM, "Mac");
        cap.setCapability("platformName", "android");
        cap.setCapability("platformVersion", "6.0.1");
        cap.setCapability("deviceName", "4d00a89e4b2631e9");
        cap.setCapability("app", "/Users/ds_nivedha/Downloads/flipkart.apk");
        cap.setCapability("appPackage", "com.usablenet.mobile.walgreen"); //Replace with your app's package
        cap.setCapability("appActivity", "com.usablenet.mobile.walgreen.AppStart"); //Replace with app's Activity
        driver = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), cap);

        driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);

        /* MobileElement skip= driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[2]/android.widget.Button[1]"));
        skip.click(); */

         MobileElement skiparrow=
                driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[3]/android.widget.ImageButton[1]"));
        skiparrow.click(); 

        MobileElement skiparrowRefill=
                driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[2]/android.widget.ImageButton[1]"));

        skiparrowRefill.click();

        MobileElement skiparrowPaperless=
                driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[2]/android.widget.ImageButton[1]"));

        skiparrowPaperless.click();

        MobileElement done=
                driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.support.v4.view.ViewPager[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.Button[1]"));
        done.click();



        MobileElement shopProducts=
                driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.support.v7.widget.RecyclerView[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[1]/android.widget.LinearLayout[2]/android.widget.TextView[2]"));
        shopProducts.click();

        MobileElement personalCare=
                driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.GridView[1]/android.widget.TextView[2]"));
        personalCare.click();


        MobileElement hairCare=
                driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.ListView[1]/android.widget.TextView[3]"));
        hairCare.click();


        MobileElement stylingProduct=
                driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.ListView[1]/android.widget.TextView[3]"));
        stylingProduct.click();

        MobileElement faroukAddToCart=
        driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.webkit.WebView[1]/android.webkit.WebView[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[3]/android.view.View[2]/android.view.View[1]/android.view.View[3]/android.view.View[1]/android.view.View[1]/android.view.View[4]/android.view.View[1]/android.view.View[1]/android.view.View[2]/android.widget.Button[1]"));
        faroukAddToCart.click();

        WebDriverWait wait = new WebDriverWait(driver, 30);
        wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//android.widget.Button[contains(@resource-id,'addToCart-cart-checkout')]")));

        driver.findElement(By.xpath("//android.widget.Button[contains(@resource-id,'addToCart-cart-checkout')]")).click();

        //driver.scrollTo("Proceed to checkout");

        MobileElement proceedToCheckout=
                driver.findElement(By.xpath("//android.widget.Button[contains(@resource-id,'proceedtocheckout')]"));


        ((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", proceedToCheckout);
        Thread.sleep(500); 

        /* Actions actions = new Actions(driver);
        actions.moveToElement(proceedToCheckout);
        actions.perform(); */

        MobileElement checkout=
                driver.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]/android.widget.FrameLayout[1]/android.widget.RelativeLayout[1]/android.widget.LinearLayout[1]/android.webkit.WebView[1]/android.webkit.WebView[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[2]/android.view.View[2]/android.view.View[5]/android.view.View[2]/android.view.View[5]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.view.View[1]/android.widget.Button[1]"));
        checkout.click();

【问题讨论】:

    标签: java android selenium appium


    【解决方案1】:

    使用滑动方式 保持起始 x 和结束 x 值不变,并更改起始 y 和结束 y 值以向上或向下滚动

    【讨论】:

    • Swpie 已从 java 客户端 4.0 版本中弃用
    • scrollTo() 和 scrollToExact() 已弃用。它们将在下一个版本中删除。不刷卡discuss.appium.io/t/java-client-4-0-0-released/10434
    • 您可以将 swipe(int startx, int starty, int endx, int endy, int duration) 覆盖为: new TouchAction(getDriver()).press(startx, starty).waitAction(duration ).moveTo(endx - startx, endy - starty).release().perform();
    • 哦,是的,我的错,滚动是贬值而不是滑动
    【解决方案2】:

    scrollTo() 方法现已弃用,您可以通过here 在官方网站上查看

    相反,如果您可以使用swipe 方法在移动设备上垂直滑动并检查您的预期文本是否可见,那么您可以进行更多滑动,当然您将使用循环来执行此操作. 要了解更多关于Swipe的信息,请参考here

    Swipe 方法参考下面的例子

     public void swipingVertical() throws InterruptedException {
      //Get the size of screen.
      size = driver.manage().window().getSize();
      System.out.println(size);
    
      //Find swipe start and end point from screen's with and height.
      //Find starty point which is at bottom side of screen.
      int starty = (int) (size.height * 0.80);
      //Find endy point which is at top side of screen.
      int endy = (int) (size.height * 0.20);
      //Find horizontal point where you wants to swipe. It is in middle of screen width.
      int startx = size.width / 2;
      System.out.println("starty = " + starty + " ,endy = " + endy + " , startx = " + startx);
    
      //Swipe from Bottom to Top.
      driver.swipe(startx, starty, startx, endy, 3000);
      Thread.sleep(2000);
      //Swipe from Top to Bottom.
      driver.swipe(startx, endy, startx, starty, 3000);
      Thread.sleep(2000);
     }
    

    如果您在这方面遇到更多障碍,请告诉我。

    【讨论】:

    • 您好,感谢您的回复。我试过了,但我无法向下滚动。我稍微修改了您的代码以垂直向下滚动。维度大小 = driver.manage().window().getSize(); System.out.println(大小); int starty = (int) (size.height * 0.80); int endy = (int) (size.height * 0.20); int startx = size.width / 2; System.out.println("starty = " + starty + " ,endy = " + endy + " , startx = " + startx); driver.swipe(startx, endy, startx, starty, 3000);线程.sleep(2000);
    • 实际上它对我也不起作用。我尝试了不同的方法。这对我有用。Dimension dimensions = driver.manage().window().getSize();双 screenHeightStart = dimensions.getHeight() * 0.5; int scrollStart = screenHeightStart.intValue(); System.out.println("s="+scrollStart);双 screenHeightEnd = dimensions.getHeight() * 0.2; int scrollEnd = screenHeightEnd.intValue(); for (int i = 0; i
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多