В последнее время я возился с селеном в c #.Я наткнулся на проблему, которую в настоящее время не могу решить.По сути, я пытаюсь открыть «меню» для гамбургеров в верхнем левом углу веб-сайта и навести курсор на его первый пункт меню: «Loterie», который должен вызвать другое подменю, чтобы всплыть прямо рядом с меню гамбургеров с некоторыми »подопции "до" Loterie ".
Сценарий будет выглядеть так: Меню -> Лотерея -> Пользователь может увидеть следующие параметры: Sportka / Eurojackpot / Rychle Kacky / etc ....
Сначала я использовал Thread.Sleep длявыполни мою задачу, и она сработала, как показано здесь:
m_driver = new ChromeDriver("C:/Users/richard/source/repos/ConsoleApp43");
m_driver.Url = "https://www.sazka.cz/";
m_driver.Manage().Window.Maximize();
IWebElement subMenu = m_driver.FindElement(By.Id("header-menu")); subMenu.Click();
IWebElement element = m_driver.FindElement(By.XPath("//*[@id='menuElem']/li[1]/a"));
Actions action = new Actions(m_driver);
System.Threading.Thread.Sleep(1000);
action.MoveToElement(element).Perform();
Однако было упомянуто, что это плохая практика, и вместо этого следует использовать класс WebDriverWait.Поэтому я попытался использовать класс WebDriverWait, но не смог его запустить.
Я нашел пару решений, которые должны иметь дело с моей проблемой, но ни одно из них, похоже, не работает, например,
Явные ожидания в Selenium C # не работают.Что не так?
Команда неявного ожидания не работает - селеновый веб-драйвер C #
Как заставить webDriver ожидать загрузки страницы (проект C # Selenium)
Я закончил с чем-то вроде этого.Тем не менее, я все еще не могу запустить его, так как с помощью следующего кода по какой-то причине только 50% тестов выполняются правильно.
m_driver = new ChromeDriver("C:/Users/richard/source/repos/ConsoleApp43");
m_driver.Url = "https://www.sazka.cz/";
m_driver.Manage().Window.Maximize();
IWebElement menu = m_driver.FindElement(By.Id("header-menu")); menu.Click();
WebDriverWait wait = new WebDriverWait(m_driver, TimeSpan.FromSeconds(1));
var loterie = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath("//*[@id='menuElem']/li[1]/a")));
Actions action = new Actions(m_driver);
action.MoveToElement(loterie).Build().Perform();
Может кто-нибудь помочь мне?
РЕДАКТИРОВАТЬ: Основная проблема заключается в том, что иногда, когда я запускаю тест, код работает так, как должен (= меню гамбургера опускается, и мышь наводится на «Loterie»).Однако в некоторых других случаях меню гамбургера только опускается, и мышь не перемещает в «Loterie», поэтому пользователь остается только с открытым меню гамбургера, а «подменю» не появляетсясрабатывает.