var droid = instance.DroidInstance;
// Простой свайп
// (Координаты начальной точки, координаты конечной точки, длительность)
droid.Input.Swipe(200, 200, 1000, 500, 1000);
// Свайп по кривой Безье.
// (Координаты начальной точки, координаты промежуточной точки, координаты конечной точки, длительность)
droid.Input.SwipeCurved(200, 200, 200, 700, 1000, 500, 1000);
Спасибо!!!C#:var droid = instance.DroidInstance; // Простой свайп // (Координаты начальной точки, координаты конечной точки, длительность) droid.Input.Swipe(200, 200, 1000, 500, 1000); // Свайп по кривой Безье. // (Координаты начальной точки, координаты промежуточной точки, координаты конечной точки, длительность) droid.Input.SwipeCurved(200, 200, 200, 700, 1000, 500, 1000);
project.Variables["swy"].Value - это строка.droid.Input.SwipeCurved(200, project.Variables["swy"].Value, 200, 700, 1000, 500, 1000);
var droid = instance.DroidInstance;
int y1 = Convert.ToInt32(project.Variables["swy"].Value);
droid.Input.SwipeCurved(200, y1, 200, 700, 1000, 500, 1000);
Спасибо!!!!project.Variables["swy"].Value - это строка.
Все параметры должны быть числовыми, т.е. нужно преобразовать строку в число.
C#:var droid = instance.DroidInstance; int y1 = Convert.ToInt32(project.Variables["swy"].Value); droid.Input.SwipeCurved(200, y1, 200, 700, 1000, 500, 1000);
Последний параметр - продолжительность свайпа. Чем меньше значение, тем быстрее выполняется свайп, соответственно будет эффект быстрого движения пальцем по экрану.А не подскажете как добиться прокрутки (быстрого свайпа)?
Неа, похоже ниже 1000 бестолку ускорять (UI похоже не переваривает)Последний параметр - продолжительность свайпа. Чем меньше значение, тем быстрее выполняется свайп, соответственно будет эффект быстрого движения пальцем по экрану.
Попробуйте снизить значение 500 - 400 - 300... Главное сильно не понижать, иначе UI может не успеть среагировать на движение.
Очень странно. Я имел в виду значения ниже 100.Неа, похоже ниже 1000 бестолку ускорять (UI похоже не переваривает)
var droid = instance.DroidInstance;
droid.Input.Swipe(360, 1100, 360, 200, duration:500);
//или
droid.Input.Swipe(360, 1100, 360, 200, duration:250);
все равно не то......Очень странно. Я имел в виду значения ниже 100.
Если у Вас экран 720x1440, попробуйте:
C#:var droid = instance.DroidInstance; droid.Input.Swipe(360, 1100, 360, 200, duration:500); //или droid.Input.Swipe(360, 1100, 360, 200, duration:250);
Медленно? Попробуйте снизить значение duration. Тут конечно нужно подбирать все индивидуально. Свайп и при физическом нажатии пальцем в реальной жизни часто ведет себя по разному, то быстрее, то медленнее, то подвиснет что-то на экране.все равно не то......
droid.Input.Swipe
- это простая функция, где можно задать только координаты и длительность.FingerDown, FingerMove, FingerUp,
которые позволяют совершать нажатие и движение произвольным образом: var droid = instance.DroidInstance;
int x1 = 360;
int y1 = 1100;
int x2 = 360;
int y2 = 200;
int step = 10;
int delayMs = 5;
droid.Input.FingerDown(x1, y1);
for (int y = y1 + step; y > y2; y-=step)
{
droid.Input.FingerMove(x1, y);
Thread.Sleep(delayMs);
}
droid.Input.FingerUp(x2, y2);
Пошустрее конечно, но не прокручивает по инерции.....Медленно? Попробуйте снизить значение duration. Тут конечно нужно подбирать все индивидуально. Свайп и при физическом нажатии пальцем в реальной жизни часто ведет себя по разному, то быстрее, то медленнее, то подвиснет что-то на экране.
droid.Input.Swipe
- это простая функция, где можно задать только координаты и длительность.
Если не получится, можно использовать более низкоуровневый вариант с использованием функцийFingerDown, FingerMove, FingerUp,
которые позволяют совершать нажатие и движение произвольным образом:
C#:var droid = instance.DroidInstance; int x1 = 360; int y1 = 1100; int x2 = 360; int y2 = 200; int step = 10; int delayMs = 5; droid.Input.FingerDown(x1, y1); for (int y = y1 + step; y > y2; y-=step) { droid.Input.FingerMove(x1, y); Thread.Sleep(delayMs); } droid.Input.FingerUp(x2, y2);
На моем телефоне, чтобы добиться инерции нужно вести пальцем не равномерно, а с ускорением. Т.е. начинаем медленно и постепенно наращиваем скорость.не прокручивает по инерции.....
var droid = instance.DroidInstance;
int x1 = 360;
int y1 = 1100;
int x2 = 360;
int y2 = 300;
int step = 10;
int increaseStep = 10;
int delayMs = 5;
droid.Input.FingerDown(x1, y1);
for (int y = y1 + step; y > y2; y-=step)
{
droid.Input.FingerMove(x1, y);
Thread.Sleep(delayMs);
// Каждый следующий шаг длиннее предыдущего => скорость выше.
step+=increaseStep;
}
droid.Input.FingerUp(x2, y2);
var droid = instance.DroidInstance;
//Сколько раз крутануть экран
var count = 3;
try
{
droid.AppiumDriver.ScrollToElementByAccessibilityId("fake-id", count);
}
catch (System.Net.WebException e) when (e.Message.Contains("no such element")){
// Элемент не существует, но нам это не важно
return 0;
}
Спасибо! но этот вариант прокручивает сначала на верх 1 раз, а потом 3 раза внизНа моем телефоне, чтобы добиться инерции нужно вести пальцем не равномерно, а с ускорением. Т.е. начинаем медленно и постепенно наращиваем скорость.
Примерно так,
У Вас вообще задача свайпнуться "куда-нибудь вниз" ? Для этого можно использовать более интересные методы, например, поиск заведомо несуществующего элемента с пролистыванием экрана ScrollToElementByAccessibilityId:C#:var droid = instance.DroidInstance; int x1 = 360; int y1 = 1100; int x2 = 360; int y2 = 300; int step = 10; int increaseStep = 10; int delayMs = 5; droid.Input.FingerDown(x1, y1); for (int y = y1 + step; y > y2; y-=step) { droid.Input.FingerMove(x1, y); Thread.Sleep(delayMs); // Каждый следующий шаг длиннее предыдущего => скорость выше. step+=increaseStep; } droid.Input.FingerUp(x2, y2);
C#:var droid = instance.DroidInstance; //Сколько раз крутануть экран var count = 3; try { droid.AppiumDriver.ScrollToElementByAccessibilityId("fake-id", count); } catch (System.Net.WebException e) when (e.Message.Contains("no such element")){ // Элемент не существует, но нам это не важно return 0; }
Здравствуйте, а подскажите пожалуйста как сделать просто клик по координатам, я делаю так но ничего не выходитНа моем телефоне, чтобы добиться инерции нужно вести пальцем не равномерно, а с ускорением. Т.е. начинаем медленно и постепенно наращиваем скорость.
Примерно так,
У Вас вообще задача свайпнуться "куда-нибудь вниз" ? Для этого можно использовать более интересные методы, например, поиск заведомо несуществующего элемента с пролистыванием экрана ScrollToElementByAccessibilityId:C#:var droid = instance.DroidInstance; int x1 = 360; int y1 = 1100; int x2 = 360; int y2 = 300; int step = 10; int increaseStep = 10; int delayMs = 5; droid.Input.FingerDown(x1, y1); for (int y = y1 + step; y > y2; y-=step) { droid.Input.FingerMove(x1, y); Thread.Sleep(delayMs); // Каждый следующий шаг длиннее предыдущего => скорость выше. step+=increaseStep; } droid.Input.FingerUp(x2, y2);
C#:var droid = instance.DroidInstance; //Сколько раз крутануть экран var count = 3; try { droid.AppiumDriver.ScrollToElementByAccessibilityId("fake-id", count); } catch (System.Net.WebException e) when (e.Message.Contains("no such element")){ // Элемент не существует, но нам это не важно return 0; }
Ошибка какая в окне лога?как сделать просто клик по координатам, я делаю так но ничего не выходит
Прикол, перезапустил проект, причем ничего в нем не менял и заработало, спасибо!Ошибка какая в окне лога?
Первый код возможно ли доработать до 3 или 4 точек?На моем телефоне, чтобы добиться инерции нужно вести пальцем не равномерно, а с ускорением. Т.е. начинаем медленно и постепенно наращиваем скорость.
Примерно так,
У Вас вообще задача свайпнуться "куда-нибудь вниз" ? Для этого можно использовать более интересные методы, например, поиск заведомо несуществующего элемента с пролистыванием экрана ScrollToElementByAccessibilityId:C#:var droid = instance.DroidInstance; int x1 = 360; int y1 = 1100; int x2 = 360; int y2 = 300; int step = 10; int increaseStep = 10; int delayMs = 5; droid.Input.FingerDown(x1, y1); for (int y = y1 + step; y > y2; y-=step) { droid.Input.FingerMove(x1, y); Thread.Sleep(delayMs); // Каждый следующий шаг длиннее предыдущего => скорость выше. step+=increaseStep; } droid.Input.FingerUp(x2, y2);
C#:var droid = instance.DroidInstance; //Сколько раз крутануть экран var count = 3; try { droid.AppiumDriver.ScrollToElementByAccessibilityId("fake-id", count); } catch (System.Net.WebException e) when (e.Message.Contains("no such element")){ // Элемент не существует, но нам это не важно return 0; }
Можно.Первый код возможно ли доработать до 3 или 4 точек?
Вот для примераПосмотреть вложение IMG_20230319_120246.jpgМожно.
Включите в настройках для разработчика отображение касаний, чтобы линии рисовало.
Проведите пальцем по экрану так, как Вам нужно, только обязательно в том приложении, где нужен свайп с пролистыванием, чтобы было видно откуда начинается движение, его траектория и где заканчивается
Сделайте скрин.
Посмотреть вложение 103410
Попробуем еще раз добиться нужного результатаПо сути нужны косые линии , но самый важный фактор это небольшое ускорение для пролистывания
В целом очень даже похоже....Попробуем еще раз добиться нужного результата
Попробуйте подобрать значения для свайпа. x1,y1 - начало; x2,y2 - конец
Координаты задаются в процентах от ширины/высоты, чтобы не привязываться к размеру дисплея. Начало координат - верхний левый угол.
Т.е. если ширина 1080, то 50% - это 540, 30% - 324 и т.д.
accelStart - это часть траектории после которой начинается ускорение "пальца" (по умолчанию с середины)
Посмотреть вложение 104898
Настройки только в шаблоне swipe. Вложенный проект скрыл, чтобы там случайно не изменить что-либо.
split - сколько раз ломается линия движения (0 не ломается)а если фигурка из 3 и более точек или косая линия "неправильная"?