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

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

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Реакции
825
Баллы
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","");

Зачем это надо.
Есть форма, с вбивом текста и под ней кнопка отправить.

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

Пробовал через регулярку, искать слово "отправить", но там находится много совпадений.
Можно конечно взять номер совпадения, но как то не очень, поменяется разметка и перестанет работать.
 
двигаетесь от одной нестабильности к другой. давайте лучше посмотрим разметку страницы. вероятнее всего можно идентифицировать элемент для клика.
 
Ок. Напишу сразу откуда это.
Это гуглопочта.))

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

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




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



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

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

То что было



То что стало


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

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

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



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

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




58750b742a21ec2c1ea3b5dc8df6564e.png
 
Спасибо за ответ, но это не то.

У меня была трабла с идентификацией кнопки отправить при ответе на письмо, поэтому и хотел эмулировать ее нажатие через 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
Все проще там)
 

Вложения

  • Спасибо
Реакции: zmike и Moadip
Спасибо. Посмотрел.
 
Блин, как ctrl+end нажать? парюсь как ТС в начале, что то не ничего не подходит
Нашел :-) instance.ActiveTab.KeyEvent("End", "press", "ctrl");
 
Последнее редактирование:
Может быть появилось адекватное решение нажатия ctrl + enter в новых версиях зенки? Или может еще есть варианты кроме описанных в начале поста?
 
instance.ActiveTab.KeyEvent("enter", "press", "ctrl"); - я написал что все 3 варианта что в начале не работают, к сожалению. Это 1 из 3.
 
Может быть появилось адекватное решение нажатия 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
Пробуй:
Потребуется подключить 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
- этот момент не совсем понял, но твой вариант попробовал и ентер сработал, перенес строку в тексте, а контрол почему то не нажался. Судя по тому что комбинация не сработала. Если с клавиатуры нажать в ПМ то конечно же работает.
 
Тоже не сработало. К сожалению. (
 
А как просто нажать клавишу V ?


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

пробовал, вот такая ошибка выдает


Компиляция кода Ошибка в действии "CS1002" "; expected". [Строка: 0; Cтолбец: 46]
 
  • Спасибо
Реакции: ukrainec2014
подскажите еще попутно, если есть возможность такая... как проверить наличие галочки чекбокс на конкретном сообщении?
 
@rostonix

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

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

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

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