如何向下滚动以使用Appium单击特定元素,因为scrollTo不起作用

时间:2016-10-27 18:25:15

标签: java android selenium-webdriver appium

我正在尝试向下滚动并点击设置中的某个元素,但由于scrollTo无效,我无法继续

package Test1;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import net.sourceforge.htmlunit.corejs.javascript.ScriptableObject;

import org.junit.After;
import org.junit.Before;
import org.openqa.selenium.By;

import org.openqa.selenium.Dimension;
import org.openqa.selenium.Point;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.io.File;
import java.net.URL;
public class MobileFindJavaTest {
private AppiumDriver<WebElement> driver;

@BeforeMethod
 @Test
public void setUp() throws Exception {
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "/Apps/slide/");
File app = new File(appDir, "ApiDemos-debug.apk");

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName","BECUPJTWGA7HAQQK");
capabilities.setCapability("platformVersion", "5");

capabilities.setCapability("appPackage", "com.android.settings");
capabilities.setCapability("appActivity", ".Settings");
driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), c         Capabilities);


    //driver.scrollTo("Views");
    TouchAction touchAction4 = new TouchAction(driver);
    touchAction4.press(30,40).moveTo(89,51).release();
    driver.performTouchAction(touchAction4);
    System.out.println("gaurav");
    driver.findElementByName("Feature").click();

}

}

driver.scrollTo显示不支持,现在如何向下滚动并单击,因为我要点击的元素不在屏幕上,我们需要滚动它

MobileElement radioGroup = (MobileElement) wd

            .findElementByAndroidUIAutomator("new UiScrollable(new UiSelector()"

            + ".resourceId(\"com.android.settings:id/title\")).scrollIntoView("

            + "new UiSelector().text(\"Feature\"));");
            radioGroup.click();

我也试过这种方式,但它不滚动......设置打开,就是这样

7 个答案:

答案 0 :(得分:3)

您可以使用以下代码段进行滚动:

system()

你可以有一些条件可以调用这个方法,一旦满足你的条件,滚动就会停止,你可以执行所需的操作。类似的东西:

public void scroll() {
    Dimension dimensions = driver.manage().window().getSize();
    int Startpoint = (int) (dimensions.getHeight() * 0.5);
    int scrollEnd = (int) (dimensions.getHeight() * 0.5);
    driver.swipe(200, Startpoint,200,scrollEnd,2000); 
}

P.S。:您可以根据需要修改0.5的值,我在我的情况下使用了所需的值。

答案 1 :(得分:2)

//创建方法名称scrollTo或您选择的任何名称,使用下面提到的代码,它将采用我们想要滚动的文本参数:

public void scrollTo(String text)
{                
driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\""+text+"\").instance(0))");
}

答案 2 :(得分:0)

“功能”文字是显示文字或内容说明

如果显示文字:

MobileElement radioGroup = (MobileElement) wd

.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector()"

+ ".resourceId(\"<listview_id>\")).scrollIntoView("

+ "new UiSelector().text(\"Feature\"));");
radioGroup.click();

这将滚动到“功能”文本显示的位置,然后单击“功能”文本。但有一点我需要解释你可以只滚动视图,其中实现的滚动功能不是按钮,文本等。

如果其内容描述:

wd.scrollToExact("Feature")

有关详细信息,请查看此视频:

https://www.youtube.com/watch?v=bT3tqaLNn-Y

点击文字:

MobileElement textLocartor = (MobileElement) wd

.findElementByAndroidUIAutomator("new UiSelector().text(\"<text_value>\")");

textLocartor.click();

答案 3 :(得分:0)

对于ScrollTo()函数,下面的方法效果很好,

driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector()).scrollIntoView("+ "new UiSelector().text(\"_input your text name here_\"));").click();

请尝试使用上述方法&amp;这应该解决你关于scrollTo()函数的问题,谢谢。

答案 4 :(得分:0)

这有效

 driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector()).scrollIntoView("+ "new UiSelector().text(\"_TAGS_\"));");

答案 5 :(得分:0)

使用wd驱动程序的Java脚本,以下滚动方法对我有用

await driver.execute('mobile: scroll', {'direction': 'down'});

答案 6 :(得分:0)

以下是我为那些使用6以上版本的Appium Java客户端的人找到的最佳一线解决方案。

driver.findElement(MobileBy.AndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\""+text+"\").instance(0))"));