Selenium - тест не щелкает по пункту меню, но если я щелкаю по нему, тест завершается - PullRequest
0 голосов
/ 08 ноября 2018

Я начал использовать Selenium WebDriver сегодня и пишу тест входа / выхода из системы.

[Test]
    public void TestLoginLogout()
    {
        //Define browser and target URL
        IWebDriver browser = new ChromeDriver();
        browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
        browser.Navigate().GoToUrl("http://test-test.net");
        browser.Manage().Window.Maximize();

        //Define login credentials and webpage elements
        IWebElement fieldUsername = browser.FindElement(By.Id("mat-input-0"));
        IWebElement fieldPassword = browser.FindElement(By.Id("mat-input-1"));

        //Perform login using login credentials
        fieldUsername.SendKeys("tester");
        fieldPassword.SendKeys("tester123");
        IWebElement buttonLogin = browser.FindElement(By.Id("LoginButton"));
        buttonLogin.Click();

        //Perform logout action
        Actions action = new Actions(browser);
        IWebElement buttonLogout = browser.FindElement(By.XPath(".//div[@class='menu']/div/ul[@class='list']/li[last()]/a"));
        action.MoveToElement(buttonLogout).Click();
        //Locate confirm button in modal window
        browser.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
        IWebElement buttonConfirm = browser.FindElement(By.XPath(".//button[@class='swal-button swal-button--confirm']"));
        buttonConfirm.Click();
    }

Когда тест входит в систему, он должен нажать кнопку «Выход из системы» в меню, а затем нажать кнопку подтверждения, когда появится модальное диалоговое окно. Проблема в том, что тест не нажимает на кнопку «Выйти», но если я вручную нажимаю на кнопку «Выйти», когда тест останавливается, то тест завершается.

Есть предложения?

1 Ответ

0 голосов
/ 08 ноября 2018

ОБНОВЛЕНИЕ: Проблема была с нажатием кнопки «Выход» в меню. Похоже, что тест выполняется слишком быстро, и поскольку наше приложение имеет элемент загрузчика между страницей входа и домашней страницей, тест попытался нажать кнопку выхода из системы, пока элемент загрузчика все еще присутствовал. Вот что я сделал:

Поскольку ExpectedConditions устарело в текущей версии WebDrivers, я скачал следующий пакет NuGet: DotNetSeleniumExtras.WaitHelpers

Я объявил переменную, которая определяла, как долго браузеру придется ждать, пока элемент будет доступен / доступен для нажатия, прежде чем выбрасывать тайм-аут, и исполнителю IJavaScript, который обрабатывает нажатие:

IJavaScriptExecutor executor = (IJavaScriptExecutor)browser;
var wait = new WebDriverWait(browser, new TimeSpan(0, 0, 10));

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

//Perform logout action
        var buttonLogout = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath(".//div[@class='menu']/div/ul[@class='list']/li[last()]/a")));
        executor.ExecuteScript("arguments[0].click();", buttonLogout);

        //Locate confirm button in modal window
        var buttonConfirm = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.XPath(".//button[@class='swal-button swal-button--confirm']")));
        executor.ExecuteScript("arguments[0].click();", buttonConfirm);

И теперь тест выполнен успешно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...