Эмуляция "Ctrl + Enter"

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Подскажите как эмулировать нажатие ctrl+enter.

Через поиск ничего не нашел.

Есть как например эмулировать "ctrl+A"
Код:
instance.ActiveTab.KeyEvent("a","press","ctrl");
А то что мне надо, нет.

Пробовал всяко разно.
Код:
instance.ActiveTab.KeyEvent("enter","press","ctrl");
Код:
instance.ActiveTab.KeyEvent("{enter}","press","ctrl");
Код:
instance.ActiveTab.KeyEvent("ctrl","down","");
instance.SendText("{ENTER}", 15);
instance.ActiveTab.KeyEvent("ctrl","up","");
Зачем это надо.
Есть форма, с вбивом текста и под ней кнопка отправить.

Проблема в том, что аттрибуты тэга в котором находится эта кнопка постоянно меняются и её нельзя взять через конструктор действия.

Пробовал через регулярку, искать слово "отправить", но там находится много совпадений.
Можно конечно взять номер совпадения, но как то не очень, поменяется разметка и перестанет работать.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 071
Благодарностей
5 702
Баллы
113
двигаетесь от одной нестабильности к другой. давайте лучше посмотрим разметку страницы. вероятнее всего можно идентифицировать элемент для клика.
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Ок. Напишу сразу откуда это.
Это гуглопочта.))

А у гугла все непросто.))

Это текущее значение атрибута




А это которое у меня в экшене и работало вчера.



Причем если в почту захожу не через zenno, а через обычный браузер, то значение остается прежнее, но это думаю не надолго.

Т.к. таким же образом перестала находится кнопка "выделить все" в папке спам, просто изменилось значение атрибута class.
Например вчера заходил только через зенно было одно значение, а сегодня зашел и оно уже другое.))

То что было



То что стало


В общем итог всего этого, гугл меняет с какой то периодичность и х.з. как генерит значения атрибутов, поэтому по ним идентифицировать элемент не получится.

К какому тэгу привязаться, чтобы от него уже спускаться к дочерним тоже непонятно.

Ну например вот к этому, но не факт что он завтра не изменится, или гугл не добавить еще один div и вся разметка поменяется.))



Если искать регуляркой "Отправить", то находится несколько совпадений. И не факт что завтра номер совпадения не изменится.))

В общем единственно вижу как это сделать, это парсить какой то хитрожопой регуляркой, которая бы могла однозначно идентифицировать элемент.
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Спасибо за ответ, но это не то.

У меня была трабла с идентификацией кнопки отправить при ответе на письмо, поэтому и хотел эмулировать ее нажатие через ctrl+enter.
В принципе если посмотреть на вашем примере то с кнопкой отправить при написании нового письма та же самая трабла.



По атрибутам id или class эту кнопку не взять, т.к. эти значения могут поменяться со временем.

Проблему решил воспользовавшись вашим советом.
двигаетесь от одной нестабильности к другой.

Атрибуты id и class не подходят, могут поменяться.

Если искать по тексту "Отправить", то находится много вхождений, это первая нестабильность.


Посмотрел, по чему еще можно найти эту кнопку, и что скорее всего таким будет всегда.

Это атрибут role.


Но тоже находится много вхождений. Это вторая нестабильность.

А вместе они дают однозначную идентификацию - это кнопка с надписью отправить.

Код:
var he = instance.ActiveTab.GetDocumentByAddress("0").FindElementsByAttribute("div", "role", "button", "text");

he.Elements.Single(e => e.InnerHtml == "Отправить").Click();
Плюс используется метод Single, если будет больше одной такой кнопки, то будет exception, шаблон выполнится с ошибкой и тогда будет понятно, что что то изменилось.

В общем таким образом нашел все нужные мне кнопки.
Х.з. может это элементарные вещи, но для меня как новичка это +1 в копилку знаний.

Может еще кому пригодится.:-)
 
  • Спасибо
Реакции: DrunkDeath

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Спасибо. Посмотрел.
 
Регистрация
04.10.2017
Сообщения
5
Благодарностей
2
Баллы
3
Блин, как ctrl+end нажать? парюсь как ТС в начале, что то не ничего не подходит
Нашел :-) instance.ActiveTab.KeyEvent("End", "press", "ctrl");
 
Последнее редактирование:

Sefroz

Client
Регистрация
20.11.2017
Сообщения
54
Благодарностей
3
Баллы
8
Может быть появилось адекватное решение нажатия ctrl + enter в новых версиях зенки? Или может еще есть варианты кроме описанных в начале поста?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 280
Благодарностей
8 610
Баллы
113

Sefroz

Client
Регистрация
20.11.2017
Сообщения
54
Благодарностей
3
Баллы
8
instance.ActiveTab.KeyEvent("enter", "press", "ctrl"); - я написал что все 3 варианта что в начале не работают, к сожалению. Это 1 из 3.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 335
Благодарностей
3 271
Баллы
113
Может быть появилось адекватное решение нажатия ctrl + enter в новых версиях зенки? Или может еще есть варианты кроме описанных в начале поста?
Пробуй:
Потребуется подключить System.Windows.Forms в меню GAC
C#:
ZennoLab.Emulation.Emulator.SendKey(instance.ActiveTab.Handle, System.Windows.Forms.Keys.LControlKey, ZennoLab.Emulation.KeyboardEvent.Down);
ZennoLab.Emulation.Emulator.SendKey(instance.ActiveTab.Handle, System.Windows.Forms.Keys.Enter, ZennoLab.Emulation.KeyboardEvent.Down);
ZennoLab.Emulation.Emulator.SendKey(instance.ActiveTab.Handle, System.Windows.Forms.Keys.Enter, ZennoLab.Emulation.KeyboardEvent.Up);
ZennoLab.Emulation.Emulator.SendKey(instance.ActiveTab.Handle, System.Windows.Forms.Keys.LControlKey, ZennoLab.Emulation.KeyboardEvent.Up);
 
Последнее редактирование:
  • Спасибо
Реакции: dio-dev

Sefroz

Client
Регистрация
20.11.2017
Сообщения
54
Благодарностей
3
Баллы
8
Пробуй:
Потребуется подключить System.Windows.Forms в меню GAC
C#:
ZennoLab.Emulation.Emulator.SendKey(instance.ActiveTab.Handle, System.Windows.Forms.Keys.Control, ZennoLab.Emulation.KeyboardEvent.Down);
ZennoLab.Emulation.Emulator.SendKey(instance.ActiveTab.Handle, System.Windows.Forms.Keys.Enter, ZennoLab.Emulation.KeyboardEvent.Down);
ZennoLab.Emulation.Emulator.SendKey(instance.ActiveTab.Handle, System.Windows.Forms.Keys.Enter, ZennoLab.Emulation.KeyboardEvent.Up);
ZennoLab.Emulation.Emulator.SendKey(instance.ActiveTab.Handle, System.Windows.Forms.Keys.Control, ZennoLab.Emulation.KeyboardEvent.Up);
подключить System.Windows.Forms в меню GAC
- этот момент не совсем понял, но твой вариант попробовал и ентер сработал, перенес строку в тексте, а контрол почему то не нажался. Судя по тому что комбинация не сработала. Если с клавиатуры нажать в ПМ то конечно же работает.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 335
Благодарностей
3 271
Баллы
113

Sefroz

Client
Регистрация
20.11.2017
Сообщения
54
Благодарностей
3
Баллы
8
Тоже не сработало. К сожалению. (
 

dio-dev

Client
Регистрация
05.11.2018
Сообщения
149
Благодарностей
54
Баллы
28

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 280
Благодарностей
8 610
Баллы
113
А как просто нажать клавишу V ?


нужно одну клавишу нажать потом уже все понятно, функциональные клавиши срабатывают норм..
Просто впишите в кубик V.
Либо через C#-кубик так: instance.ActiveTab.KeyEvent("V", "press", "")
 

ukrainec2014

Client
Регистрация
12.05.2017
Сообщения
349
Благодарностей
51
Баллы
28
Просто впишите в кубик V.
Либо через C#-кубик так: instance.ActiveTab.KeyEvent("V", "press", "")
пробовал, вот такая ошибка выдает


Компиляция кода Ошибка в действии "CS1002" "; expected". [Строка: 0; Cтолбец: 46]
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 280
Благодарностей
8 610
Баллы
113
  • Спасибо
Реакции: ukrainec2014

ukrainec2014

Client
Регистрация
12.05.2017
Сообщения
349
Благодарностей
51
Баллы
28
подскажите еще попутно, если есть возможность такая... как проверить наличие галочки чекбокс на конкретном сообщении?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 280
Благодарностей
8 610
Баллы
113

zmike

Client
Регистрация
24.10.2019
Сообщения
119
Благодарностей
7
Баллы
18
@rostonix

Спасибо, это работает для меня, чтобы нажать на веб-версию Отправить в Gmail.

В примере используется регулярное выражение, чтобы получить кнопку «Отправить» и нажать на нее.

Больше нет необходимости в C # для нажатия на всплывающее окно Gmail.
 

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