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

  • Автор темы Автор темы orka13
  • Дата начала Дата начала

orka13

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

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

лучше получать центр и от него рандомить уже в % соотношении и разрешить изменять этот % юзеру
 
Последнее редактирование:
  • Спасибо
Реакции: orka13
Можно и такой вариант. Надо получается как бы "скрестить" существующие на сегодня два варианта в опциях клика: "Центр" и "Случайно".
 
//создайте переменные 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");
 
//создайте переменные 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:
 
Решение: если размер кнопки позволяет, то сделать отступ в 10% (или хотя бы 1 пиксель для самых малых кнопок) от краёв кнопки для формирования области для рандомного клика.
Ключевое слово random имеет расширенный синтаксис. Чтобы задать отступы можно воспользоваться исключающими диапазонами. Например, для отступа в 3px с каждого края нужно указать random1(3-(end-3))

ProjectMakerZD_2COsSMS32A.png
 
Последнее редактирование:
  • Спасибо
Реакции: orka13
Ключевое слово random имеет расширенный синтаксис. Чтобы задать отступы можно воспользоваться исключающими диапазонами. Например, для отступа в 3px с каждого края нужно указать random1(3-(end-3))

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

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