我想在 Android、java 客户端 v-5.0.4 和 appium v​​-1.7.1 中使用 appium 向下滚动到特定元素

Posted

技术标签:

【中文标题】我想在 Android、java 客户端 v-5.0.4 和 appium v​​-1.7.1 中使用 appium 向下滚动到特定元素【英文标题】:I want to scroll down to Specific element using appium in Android, java client v-5.0.4 and appium v-1.7.1 【发布时间】:2017-12-23 17:10:42 【问题描述】:

我正在尝试向下滚动到一个元素,到处查看和搜索,没有代码可以帮助向下滚动,我尝试使用下面的代码似乎不起作用,任何人都给了我完美向下滚动的解决方案。 由于 swipe 和 scrollTo 功能在最新的 java 客户端版本中被贬低,完美的代码将帮助我解决我的任务

package mobileapp.com.example;

import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.pagefactory.AndroidFindBy;

public class Day5 

    AndroidDriver<WebElement> driver;

    @AndroidFindBy (uiAutomator = "new UiScrollable(new UiSelector()).scrollIntoView(new UiSelector().textContains(\"php\"))")
    public WebElement scrollStepOne;

    @BeforeTest
    public void setup() throws MalformedURLException 
    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability("BROWSER_NAME", "Android");
    capabilities.setCapability("VERSION", "6.0.1");
    capabilities.setCapability("deviceName","Nexus 5");
    capabilities.setCapability("platformName","Android");
    capabilities.setCapability("appPackage", "com.vector.guru99");
    capabilities.setCapability("appActivity","com.vector.guru99.BaseActivity");

    driver= new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

    

    @Test
    public void StartTest() throws InterruptedException 

        //Verify Homepage
        if(driver.findElement(By.id("android:id/action_bar_title")).isDisplayed())
            System.out.println("Home page is displayed");
        else
            System.out.println("Home page is not displayed");

        //step2 - click on Course List tab

        driver.findElement(By.name("Course List")).click();
        System.out.println("Courses list are : ");
        Thread.sleep(3000);

        //Step 3 - darg until PHP course found and click on it
        scrollStepOne.click();
        Thread.sleep(3000);
//      driver.findElement(By.xpath("//android.widget.TextView[@text()='PHP']")).click();
//      Thread.sleep(3333);

        //Step 4 - Click on lesson 1 and verify
        driver.findElement(By.xpath("//android.widget.TextView[@text='What is PHP? Write your first PHP Program']")).click();
        Thread.sleep(3333);

        if(driver.findElement(By.id("com.vector.guru99:id/lesson_title")).isDisplayed())
            System.out.println("First Lesson is displayed");
        else
            System.out.println("First lesson not opened");


    

    @AfterTest
    public void tearDown() 
        driver.quit();
    


【问题讨论】:

你能指定它是原生的、混合的还是webapp? 我只使用原生应用 【参考方案1】:

滚动到一个元素有一个文本作为App_Settings,你可以使用下面的

 androidDriver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0))" +
        ".scrollIntoView(new UiSelector().description(\"App_Settings\"));");

【讨论】:

嗨,JC,我正在使用最新版本的 appium 和 java 客户端,在此版本中使用 findElementByAndroidUIAutomator 已被弃用。请提供另一种滚动方式

以上是关于我想在 Android、java 客户端 v-5.0.4 和 appium v​​-1.7.1 中使用 appium 向下滚动到特定元素的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 设备上生成客户端证书

来自 Java 服务器的持久 http 连接

Android 从 Service 到 Client 的通信

在 android [JAVA] 中的多个 Arraylist 中添加 JSON 数组

开始录屏权限android java

我想在 android 中更改 Tabbed Child Activity 的标题