Сделайте поля (padding) для клика random, а то по краю кнопки кликает.

orka13

Client
Регистрация
07.05.2015
Сообщения
2 159
Благодарностей
2 159
Баллы
113
96611
1662126988140.png

Иногда в смартфоне рандомный клик попадает именно на границу кнопки (красный контур на скрине), и он не засчитывается приложениями. Это не теория, у меня включено отображение касаний, и на отладке ловлю такое на мелких кнопках.
Решение: если размер кнопки позволяет, то сделать отступ в 10% (или хотя бы 1 пиксель для самых малых кнопок) от краёв кнопки для формирования области для рандомного клика. Пока приходится на C# костыль клепать.
 

ebrwebrw

Client
Регистрация
20.08.2018
Сообщения
221
Благодарностей
163
Баллы
43
10% мало, иногда поле во весь экран а активная его часть ближе к центру

лучше получать центр и от него рандомить уже в % соотношении и разрешить изменять этот % юзеру
 
Последнее редактирование:
  • Спасибо
Реакции: orka13

orka13

Client
Регистрация
07.05.2015
Сообщения
2 159
Благодарностей
2 159
Баллы
113
Можно и такой вариант. Надо получается как бы "скрестить" существующие на сегодня два варианта в опциях клика: "Центр" и "Случайно".
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 914
Благодарностей
6 381
Баллы
113
//создайте переменные X и Y
снип для веб версии, может и для эмуля подойдет

C#:
//создайте переменные X и Y
Tab tab = instance.ActiveTab;
Random rand = new Random();
var x2 = rand.Next(5, 35); //отступ по Х
var y2 = rand.Next(2, 15); //отступ по Y
HtmlElement he = tab.FindElementByXPath("//button//span[text()='Найти']",0);

//тут были нужные тебе данные о позиции элемента
project.SendInfoToLog("Y:"+Convert.ToString(he.DisplacementInTabWindow.Y), false);
project.SendInfoToLog("X:"+Convert.ToString(he.DisplacementInTabWindow.X), false);
project.Variables["X"].Value = Convert.ToString(he.DisplacementInTabWindow.X + x2);
project.Variables["Y"].Value = Convert.ToString(he.DisplacementInTabWindow.Y + y2);

instance.WaitFieldEmulationDelay();
// Эмулировать клик
instance.Click(Convert.ToInt32(project.Variables["X"].Value), Convert.ToInt32(project.Variables["X"].Value), Convert.ToInt32(project.Variables["Y"].Value), Convert.ToInt32(project.Variables["Y"].Value), "Left", "Normal");
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
113
//создайте переменные X и Y
снип для веб версии, может и для эмуля подойдет

C#:
//создайте переменные X и Y
Tab tab = instance.ActiveTab;
Random rand = new Random();
var x2 = rand.Next(5, 35); //отступ по Х
var y2 = rand.Next(2, 15); //отступ по Y
HtmlElement he = tab.FindElementByXPath("//button//span[text()='Найти']",0);

//тут были нужные тебе данные о позиции элемента
project.SendInfoToLog("Y:"+Convert.ToString(he.DisplacementInTabWindow.Y), false);
project.SendInfoToLog("X:"+Convert.ToString(he.DisplacementInTabWindow.X), false);
project.Variables["X"].Value = Convert.ToString(he.DisplacementInTabWindow.X + x2);
project.Variables["Y"].Value = Convert.ToString(he.DisplacementInTabWindow.Y + y2);

instance.WaitFieldEmulationDelay();
// Эмулировать клик
instance.Click(Convert.ToInt32(project.Variables["X"].Value), Convert.ToInt32(project.Variables["X"].Value), Convert.ToInt32(project.Variables["Y"].Value), Convert.ToInt32(project.Variables["Y"].Value), "Left", "Normal");
они для Дроида просят :bk:
 

Anatoly79

Moderator
Регистрация
17.04.2020
Сообщения
378
Благодарностей
269
Баллы
63
Решение: если размер кнопки позволяет, то сделать отступ в 10% (или хотя бы 1 пиксель для самых малых кнопок) от краёв кнопки для формирования области для рандомного клика.
Ключевое слово random имеет расширенный синтаксис. Чтобы задать отступы можно воспользоваться исключающими диапазонами. Например, для отступа в 3px с каждого края нужно указать random1(3-(end-3))

ProjectMakerZD_2COsSMS32A.png
 
Последнее редактирование:
  • Спасибо
Реакции: orka13

orka13

Client
Регистрация
07.05.2015
Сообщения
2 159
Благодарностей
2 159
Баллы
113
Ключевое слово random имеет расширенный синтаксис. Чтобы задать отступы можно воспользоваться исключающими диапазонами. Например, для отступа в 3px с каждого края нужно указать random1(3-(end-3))

Посмотреть вложение 96620
Спс. Работает. Справедливости ради замечу что в моем случае клик сбоил на тех кнопках которые появлялись с анимацией в приложении. И получается дроид в ожидании появления элемента ловил координаты кнопки криво во время ее движения. Решения для подобного косяка: делаем в проекте 2 кубика, сначала кубик для ожидания-проверка наличия кнопки (без действия, допустим парсинг координат кнопки), потом пауза в секунду (чтобы точно ее "анимация" завершилась), и уже потом клик.
 
  • Спасибо
Реакции: ServerAbuser и Ysocnet

ServerAbuser

Новичок
Регистрация
22.11.2022
Сообщения
15
Благодарностей
4
Баллы
3
Спс. Работает. Справедливости ради замечу что в моем случае клик сбоил на тех кнопках которые появлялись с анимацией в приложении. И получается дроид в ожидании появления элемента ловил координаты кнопки криво во время ее движения. Решения для подобного косяка: делаем в проекте 2 кубика, сначала кубик для ожидания-проверка наличия кнопки (без действия, допустим парсинг координат кнопки), потом пауза в секунду (чтобы точно ее "анимация" завершилась), и уже потом клик.
Спасибо, тоже искал решение подобной проблемы
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)