Не получается обработать нажатие кнопки.

red2050stet

Client
Регистрация
18.12.2015
Сообщения
3
Благодарностей
0
Баллы
1
Привет. Вот сам сайт. Кнопка Login реагирует и на левый и на правый клик одинаково, в итоге через конструктор действий у меня не получается ничего сделать, чтобы добавить нажатие в проект. А как по-другому я не умею. Подскажите, пожалуйста.

P.S. Вроде получилось через исследовать элемент, найти нужный button и прописать по нему через конструктор уже.
Нет других путей рациональнее?)
 
Последнее редактирование:

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 112
Благодарностей
196
Баллы
63
Привет. Вот сам сайт. Кнопка Login реагирует и на левый и на правый клик одинаково, в итоге через конструктор действий у меня не получается ничего сделать, чтобы добавить нажатие в проект. А как по-другому я не умею. Подскажите, пожалуйста.

P.S. Вроде получилось через исследовать элемент, найти нужный button и прописать по нему через конструктор уже.
Нет других путей рациональнее?)
Приветствую. Я кликнул правой кнопкой на логотип, у меня открылся отладчик. Почему-то xpath helper там не работает, но скорее всего путь для клика по кнопке будет такой: //button[contains(class, 'btn-standard call-to-action')] (в самом xpath лучше указать что-то одно - или btn-standard, или call-to-action. Если FullMouth его не находит, то указываем оба пути.
Код для клика по кнопке будет такой:
C#:
HtmlElement BtnClk= instance.ActiveTab.FindElementByXPath(" //button[contains(@class, 'btn-standard call-to-action')]",0);
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(BtnClk);
instance.ActiveTab.FullEmulationMouseClick("left","click");
instance.ActiveTab.WaitDownloading();
System.Threading.Thread.Sleep(rnd.Next(4500,7800));
 
  • Спасибо
Реакции: red2050stet

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8
Приветствую. Я кликнул правой кнопкой на логотип, у меня открылся отладчик. Почему-то xpath helper там не работает, но скорее всего путь для клика по кнопке будет такой: //button[contains(class, 'btn-standard call-to-action')] (в самом xpath лучше указать что-то одно - или btn-standard, или call-to-action. Если FullMouth его не находит, то указываем оба пути.
Код для клика по кнопке будет такой:
C#:
HtmlElement BtnClk= instance.ActiveTab.FindElementByXPath(" //button[contains(@class, 'btn-standard call-to-action')]",0);
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(BtnClk);
instance.ActiveTab.FullEmulationMouseClick("left","click");
instance.ActiveTab.WaitDownloading();
System.Threading.Thread.Sleep(rnd.Next(4500,7800));
Подскажите, а методы .FullEmulation как добавить? У меня есть только Click() и RiseEvent().
Схожая проблема (в телеге). Не нажимаем кнопку.
При этом если тестирую отдельно, то нажатие идет, а в общем коде клик куда-то мимо происходит и выделяет сообщение вместо нажатия кнопки.

пример кода, который нажимает кнопку (через xpath ищу конкретный элемент)
C#:
Tab Tab1 = instance.ActiveTab;
HtmlElement buttonCaptcha = Tab1.FindElementByXPath("//div[@class='im_message_body']/descendant::div[@class='reply_markup_button_wrap reply_markup_button_w3'][last()]/button", 0);
buttonCaptcha.RiseEvent("onclick", instance.EmulationLevel);
пример кода, который жмет куда-то в сторону (получаю коллецию элементов и перебираю их через foreach, переменная regexRezult получена ранее и содержит значение с которым идет сравнение каждого элемента из коллекции )
C#:
Tab Tab1 = instance.ActiveTab;
HtmlElementCollection buttonElements = Tab1.FindElementsByXPath("//div[@class='im_message_body']/descendant::div[@class='reply_markup_button_wrap reply_markup_button_w3']");
foreach (HtmlElement buttonElementsTest in buttonElements.Elements) {
    string strButton = buttonElementsTest.FindChildByXPath(".//button", 0).GetAttribute("innerHtml");
    if (strButton==regexRezult.ToString()) {
        buttonElementsTest.Click();//не кликает куда нужно. При тесте прямого пути кликает как надо
    }
    break;
}
 
Последнее редактирование:

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 112
Благодарностей
196
Баллы
63
Подскажите, а методы .FullEmulation как добавить? У меня есть только Click() и RiseEvent().
Методы идут из коробки, обычно вызываются так:
C#:
instance.ActiveTab.FullEmulationMouseClick("left","click");
//Например
В using ничего не удаляли? директивы using и общий код которые

пример кода, который жмет куда-то в сторону
Если код жмет куда-то в сторону или уходит за экран, значит xpath составлен не совсем корректно. Обычно, он составляется так, чтобы однозначно находить 1 нужный элемент или если коллекция, то сначала ищутся контейнеры, которые содержат множество искомых элементов, потом в них уже ищется коллекция из нужных элементов. Такой способ исключает клики за экран или не по месту.
 

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8
Методы идут из коробки, обычно вызываются так:
C#:
instance.ActiveTab.FullEmulationMouseClick("left","click");
//Например
В using ничего не удаляли? директивы using и общий код которые


Если код жмет куда-то в сторону или уходит за экран, значит xpath составлен не совсем корректно. Обычно, он составляется так, чтобы однозначно находить 1 нужный элемент или если коллекция, то сначала ищутся контейнеры, которые содержат множество искомых элементов, потом в них уже ищется коллекция из нужных элементов. Такой способ исключает клики за экран или не по месту.
В том то и дело, что xpath путь верный. При тестировании его в отдельном C# кубике клик однозначно происходит по нужному элементу. А вот в случае, когда беру элемент из полученной коллекции элементов не находит.
Ну скорее всего дело в том, что итоговый xpath неверный, как вы и сказали. Хотя пока не очень понимаю почему, руками находится. Буду разбираться

C using разобрался. Мой косяк, неверно метод вызывал.

Спасибо за ответ
 

Slipper08

Client
Регистрация
16.08.2017
Сообщения
36
Благодарностей
3
Баллы
8
artsmm, спасибо за совет. Разобрался в чём дело.
Получается, что брал элемент коллекции, но не уточнял его через xpath, а просто жал...куда-то. Сейчас всё заработало.
было
C#:
buttonElementsTest.Click();
стало
C#:
buttonElementsTest.FindChildByXPath(".//button", 0).Click();
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 112
Благодарностей
196
Баллы
63
artsmm, спасибо за совет. Разобрался в чём дело.
Получается, что брал элемент коллекции, но не уточнял его через xpath, а просто жал...куда-то. Сейчас всё заработало.
было
C#:
buttonElementsTest.Click();
стало
C#:
buttonElementsTest.FindChildByXPath(".//button", 0).Click();
отлично, поздравляю)) удачи вам
 

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