В последнее время я возился с селеном в С#. Я наткнулся на проблему, которую я в настоящее время не могу решить. По сути, я пытаюсь открыть «меню» гамбургера в верхнем левом углу веб-сайта и навести указатель мыши на его первый пункт меню: «Лотерия», который должен вызвать появление другого подменю рядом с меню гамбургера с некоторыми « подопции» на «Лотерея».
Сценарий будет таким: Меню -> Лотерея -> Пользователь может видеть следующие опции: Sportka / Eurojackpot / Rychle Kacky / и т.д....
Сначала я использовал 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# не работают. Что не так?
Неявная команда ожидания Не работает веб-драйвер Selenium С#
Как заставить 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();
Может ли кто-нибудь помочь мне?
РЕДАКТИРОВАТЬ: Основная проблема заключается в том, что иногда, когда я запускаю тест, код работает так, как должен (=меню гамбургера скатывается вниз, а мышь наводится на «Лотерию»). Однако в некоторых других случаях гамбургер-меню только сворачивается, а мышь не наводится на «Лотерию», поэтому пользователю остается только открытое гамбургер-меню, а «подменю» не открывается. получить триггер.
Uncaught ReferenceError: SCEChatOptions is not defined at Object.storeEvents
- person apploid   schedule 22.10.2018m_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10)
, но все равно не работает - person apploid   schedule 22.10.2018