Как прокрутить в мобильном браузере, используя Appium и Селен?

Как прокрутить в мобильном браузере, используя Appium и Селен? Scroll работает в приложении, но не в браузере. Использование метода scrollToExact. веб-приложение было разработано с использованием ионной структуры

2 ответа

Есть несколько способов, как это сделать.

Если вы используете экземпляр AppiumDriver, вам необходимо переключиться в собственное представление, прежде чем вы сможете использовать TouchAction

driver.context("NATIVE_APP");
// Get your screen size to set properly start point (startX, startY)
// and end point (endX, endY) for scrolling
Dimension screenSize = driver.manage().window().getSize();
new TouchAction(driver)
  .press(<startX>, <startY>)
  .waitAction(500)
  .press(<endX>, <endY>)
  .release()
  .perform();

Если вы используете экземпляр RemoteWebDriver, то вы можете сделать это так:

driver.get("https://www.google.de");
ExecuteMethod method = new RemoteExecuteMethod(driver);
RemoteTouchScreen screen = new RemoteTouchScreen(method);
screen.up(10, 20);

Благодаря dmle я обнаружил, что вам нужно переключиться на собственный вид, прежде чем вы сможете использовать TouchAction. В любом случае этот код не работал, так как метод Press не принимает два значения int.

Здесь я делюсь кодом, который сработал в моем случае, а также тем, как использовать элемент веб-контекста в качестве ссылки, сохраняя его значения перед переходом на собственный контекст. Я также восстанавливаю предыдущий контекст:

      //Get web context element references to touch on its area
MobileElement tmpElement = driver.findElement(by);
int x=tmpElement.getLocation().x; 
int y=tmpElement.getLocation().y;
Dimension elemSize = tmpElement.getSize();
int height=elemSize.height;

//Save precious context
String previousContext=driver.getContext();
//Set native context
driver.context("NATIVE_APP");   
//Perform scroll
new TouchAction(driver)
    .press(ElementOption.point(x+5, y+height-5))
    .waitAction(WaitOptions.waitOptions(ofSeconds(1)))
    .moveTo(ElementOption.point(x+5, y+5))
    .release()
    .perform();
//Restore context
driver.context(previousContext);
Другие вопросы по тегам