Не могу найти элементы для ввода логина и пароля на обновлённой странице

Ситуация такая. Только начинаю разбираться в автотестировании.
Пишу тест(С#, Selenium WebDriver) для этого сайта http://onliner.by
Первым делом нужно пройти авторизацию. Кнопку “Вход” при помощи Xpath я нашёл на этой странице и кликнул. Затем как бы страница обновляется и на ней уже совсем другое содержимое - поля для ввода логина и пароля, а текущая ссылка при этом осталась прежней - http://onliner.by
И теперь мне нужно заполнить поля логин и пароль. Также копирую Xpath, но уже код не работает:
driver.FindElement(By.XPath(“//[@id=‘auth-container__forms’]/div/div[2]/form/div[1]/div[1]/input")).SendKeys(“user”);
driver.FindElement(By.XPath("//
[@id=‘auth-container__forms’]/div/div[2]/form/div[1]/div[2]/input”)).SendKeys(“password”);
driver.FindElement(By.XPath(“//*[@id=‘auth-container__forms’]/div/div[2]/form/div[3]/div/button”)).Click();

Логин- //[@class=‘auth-box__input’ and contains(@data-bind,‘login.data.login’)]
Пароль - //
[@class=‘auth-box__input’ and contains(@data-bind,‘login.data.pass’)]

1 лайк

А к тексту привязываться плохая практика?
//*[@id=‘auth-container__forms’]//input[contains(@placeholder,‘Ник или e-mail’)]

Если сайт поддержиает локализации, то абсолютно не стоит.

А можно подробнее с этого места? Как именно не работает, какую ошибку кидает?

Просто открывает страницу входа и дальше ничего не происходит, поля не заполняются значениями.
Ошибку в visual studio выдаёт такую:
Имя теста: FindElements_Test
Полное имя теста: ToolsQA.Selenium_Basics.FindElements_Commands.FindElements_Test
Источник теста: D:\VSProjects\ToolsQA\ToolsQA\ToolsQA\Selenium Basics\FindElements_Commands.cs : строка 16
Выходные данные теста: Сбой
Продолжительность теста: 0:00:18,304

Результат Трассировка стека:
в OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
в OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
в OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(String mechanism, String value)
в OpenQA.Selenium.Remote.RemoteWebDriver.FindElementByXPath(String xpath)
в OpenQA.Selenium.By.<>c__DisplayClass19_0.b__0(ISearchContext context)
в OpenQA.Selenium.By.FindElement(ISearchContext context)
в OpenQA.Selenium.Remote.RemoteWebDriver.FindElement(By by)
в ToolsQA.Selenium_Basics.FindElements_Commands.FindElements_Test() в D:\VSProjects\ToolsQA\ToolsQA\ToolsQA\Selenium Basics\FindElements_Commands.cs:строка 27

Результат Сообщение:
OpenQA.Selenium.NoSuchElementException : no such element: Unable to locate element: {“method”:“xpath”,“selector”:"//*[@id=‘auth-container__forms’]/div/div[2]/form/div[1]/div[1]/input"}
(Session info: chrome=61.0.3163.100)
(Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 6.1.7601 SP1 x86_64)

Так кстати тоже не работает, поля остаются не заполненными
driver.FindElement(By.XPath("//[@class=‘auth-box__input’ and contains(@data-bind,‘login.data.login’)]")).SendKeys(“user”);
driver.FindElement(By.XPath("//
[@class=‘auth-box__input’ and contains(@data-bind,‘login.data.pass’)]")).SendKeys(“password”);

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

Добавте задержку. Лучше умную задержку типа WebDriverWait

Да, спасибо большое, всё дело в задержке)
Эта проблема решилась, столкнулся со следующей - проверка на робота)

Это как я понимаю уже более сложный вопрос - и так просто его не решишь?)

Гугл научился такие капчи разгадывать с помощью AI, можете попробовать с ними посоревноваться )))

ладно, пока настолько глубоко лезть не буду)