Мне никогда не удавалось использовать ни один из методов прокрутки Javascript.Я реализовал метод ScrollDown
, который использует простое перелистывание по координатам для прокрутки вниз.
Прокрутка вниз - это то же самое, что прикоснуться к экрану в одном месте, удерживая касание и двигаясь вверх, затем отпуская касание.Мы можем реализовать это действие, используя библиотеки Appium.MultiTouch и Appium.Interfaces:
private static void Swipe(this IPerformsTouchActions driver, int startX, int startY, int endX, int endY)
{
new TouchAction(driver).Press(startX, startY).MoveTo(endX, endY).Release().Perform();
}
startX, startY
относятся к координатам, с которых вы «начнете» свайп.Для прокрутки вниз эти координаты должны отображаться на экране ниже, чем ваши endX, endY
координаты.
Поскольку мы просто прокручиваем, обычно startX
равно endX
.Здесь будет изменяться только координата y.
Наконец, Swipe
требует, чтобы ваш AppiumDriver был упакован в тип IPerformsTouchActions
.Это означает, что если вы хотите выполнить другие действия WebDriver в вызывающем методе, например FindElement, вам нужно будет обернуть свой вызов Swipe
как таковой.Вот полный пример метода Swipe
и вызывающего его метода в действии:
public static void ScrollDown(this AndroidDriver<AppiumWebElement> driver, int numberOfScrolls = 3, int startX = 0, int startY = 0, int endY = 0)
{
// set coordinates to default vals in middle of screen if not provided
if (startX == 0) startX = 397;
if (startY == 0) startY = 914;
if (endY == 0) endY = 706;
// wrap this method so we can use IPerformsTouchActions driver type
for (int i = 0; i < numberOfScrolls; i++)
{
Swipe(driver, startX, startY, startX, endY);
Thread.Sleep(500);
}
}
private static void Swipe(this IPerformsTouchActions driver, int startX, int startY, int endX, int endY)
{
new TouchAction(driver).Press(startX, startY).MoveTo(endX, endY).Release().Perform();
}