Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Не могу нажать на кнопку (с# +Selenium WebDriver)

webdriver
Теги: #<Tag:0x00007f7b649403b8>

#1

Прииспользовании следующего кода:
IWebElement element = driver.FindElement(By.CssSelector("#loginBtn"));
element.Click();
Фото елемента:

Помогите пожалуйста.


(Сергей Кузьмин) #2

а можно полюбопытствовать что происходит-то ?


(Юрий Аксютин) #3

Cбоку, есть лейбочка event, посмотрите на какой ивент настроено срабатывание события и после этого рекомендую изучить команду:

((IJavaScriptExecutor)driver).ExecuteScript(javaScript, args);

с ее помощью, вы можете любой ивент отправить на element


#4

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


#5

спасибо, обязательно посмотрю!


(Юрий Аксютин) #6

пример команды, привожу конечный результат, без использования параметров:

string javaScript = $"document.evaluate(\"{XPath}\", document, null,  XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.dispatchEvent(new MouseEvent(\"click\", {bubbles:true}))";
var javaScriptExecutor = (IJavaScriptExecutor) driver;
javaScriptExecutor.ExecuteScript(javaScript);

(Nik Sidorenko) #7

Что происходит с тестом после клика? Падает? С каким exception?

Догадки

  1. Убедитесь что по этому селектору находится действительно только 1 элемент
  2. Если в парент “div” ничего кроме этого элемента “а” нет, то попробуйте кликнуть на него
  3. После нахождения элемента попробуйте перед кликом вычитать какое-то его свойство (например, текст)
  4. Глупо конечно спрашивать такое, но всякое бывает. Руками при нажатии кнопки всё ок?

(Oleg) #8

Необходимо больше информации чтобы понять что происходит, судя по скриншоту консоли тесты выполняются в IE? Если так, то нужно для начала обновиться до последней версии. Т.е. нужно обновить браузер, драйвер и селениум библиотеки, после этого попробовить еще раз. Если не помогло, дальше проблему можно попробовить отловить в режиме отладки (debug), нужно пробовить найти элемен (посмотреть что возвращаеться), попытаться кликнуть тоже в режиме отладки, если не получилось, то попытаться изменить локатор, например вместо CssSelector использовать Id и т.д., если и это не помогло то как уже советовали попробуйте тоже в режиме отладки кликнуть соседние элементы и посмотреть что произойдет (родителя и если есть внутри элемента другие элементы, на скриншоте не видно что там дальше просто).


#9

спасибо за помощь.
решил эту проблему так:
var _driver = new FirefoxDriver();
_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
driver.FindElement(By.Id(“loginBtn”)).Click();


(Oleg) #10

Только не используйте explicit wait в таком случае в проекте, если у вас implicit wait 5 секунд.


(Сергей Кузьмин) #11

еще по моему можно просто ждать не страницы а собственно элемена по кот ударять потом
например (из другого проекта):


wait.Until(d => (d.FindElements(By.CssSelector("div[role='option']"))).Count > 0);