Selenium C # ElementNotFound Обработка исключений - PullRequest
0 голосов
/ 21 ноября 2018

Я запускаю случай в Selenium, в котором я хочу убедиться, что все элементы отображаются на веб-странице, но я хочу, чтобы пользовательские утверждения отображались в конце теста, если один или несколько не могут быть найдены.В настоящее время, используя driver.FindElement, я не могу обойти исключения ElementNotFound при назначении элементов переменным, если их нет во время идентификации.Есть ли способ обойти это?Вот мой текущий код

        IWebElement userIcon = driver.FindElement(By.CssSelector("li.dropdown:nth-child(3) > a:nth-child(1)"));
        userIcon.Click();


        IWebElement profileIcon = driver.FindElement(By.CssSelector("li.dropdown:nth-child(3) > ul:nth-child(2) > li:nth-child(1)"));
        profileIcon.Click();


        IWebElement headerLogo = driver.FindElement(By.CssSelector(".company-logo"));


        IWebElement headerMsgDrop = driver.FindElement(By.CssSelector(".fa-envelope-o"));
        headerMsgDrop.Click();
        IWebElement headerMsgDropSubGeneral = driver.FindElement(By.CssSelector("li.dropdown:nth-child(2) > ul:nth-child(2)"));


        Assert.Multiple(() =>
        {
            Assert.IsTrue(headerLogo.Displayed, "Header Logo NOT Present");
            Assert.IsTrue(headerMsgDrop.Displayed, "Header Main Message Drop NOT Present");
            Assert.IsTrue(headerMsgDropSubGeneral.Displayed, "Header - Message - General Option NOT Present");
        });


        IWebElement headerUserDrop = driver.FindElement(By.CssSelector("li.dropdown:nth-child(3) > a:nth-child(1)"));
        headerUserDrop.Click();
        IWebElement headerUserDropSubProfile = driver.FindElement(By.CssSelector(".user-name"));
        IWebElement headerUserDropSubCredentials = driver.FindElement(By.CssSelector("li.dropdown:nth-child(3) > ul:nth-child(2) > li:nth-child(2) > a:nth-child(1)"));
        IWebElement headerUserDropSubSettings = driver.FindElement(By.CssSelector("li.dropdown:nth-child(3) > ul:nth-child(2) > li:nth-child(3) > a:nth-child(1)"));
        IWebElement headerUserDropSubChgPass = driver.FindElement(By.CssSelector("li.dropdown:nth-child(3) > ul:nth-child(2) > li:nth-child(4) > a:nth-child(1)"));
        IWebElement headerUserDropSubRstGrid = driver.FindElement(By.CssSelector("#clearLocalStorage"));
        IWebElement headerUserDropSubLogOff = driver.FindElement(By.CssSelector("li.dropdown:nth-child(3) > ul:nth-child(2) > li:nth-child(6) > a:nth-child(1)"));


        Assert.Multiple(() =>
        {
            Assert.IsTrue(headerUserDrop.Displayed, "Header Main User Drop NOT Present");
            Assert.IsTrue(headerUserDropSubProfile.Displayed, "Header - User - Profile Option NOT Present");
            Assert.IsTrue(headerUserDropSubCredentials.Displayed, "Header - User - Credentials Option NOT Present");
            Assert.IsTrue(headerUserDropSubSettings.Displayed, "Header - User - Settings Option NOT Present");
            Assert.IsTrue(headerUserDropSubChgPass.Displayed, "Header - User - Change Password Option NOT Present");
            Assert.IsTrue(headerUserDropSubRstGrid.Displayed, "Header - User - Reset Grid Option NOT Present");
            Assert.IsTrue(headerUserDropSubLogOff.Displayed, "Header - User - Log off Option NOT Present");
        });


        IWebElement headerSupportDrop = driver.FindElement(By.CssSelector("li.dropdown:nth-child(4) > a:nth-child(1)"));
        headerSupportDrop.Click();
        IWebElement headerSupportDropSubBase = driver.FindElement(By.CssSelector("li.dropdown:nth-child(4) > ul:nth-child(2) > li:nth-child(1) > a:nth-child(1)"));
        IWebElement headerSupportDropSubFaq = driver.FindElement(By.CssSelector("li.dropdown:nth-child(4) > ul:nth-child(2) > li:nth-child(2) > a:nth-child(1)"));
        IWebElement headerSupportDropSubTicket = driver.FindElement(By.CssSelector("li.dropdown:nth-child(4) > ul:nth-child(2) > li:nth-child(3) > a:nth-child(1)"));


        Assert.Multiple(() =>
        {
            Assert.IsTrue(headerSupportDrop.Displayed, "Header Main Support Drop NOT Present");
            Assert.IsTrue(headerSupportDropSubBase.Displayed, "Header - Support - Knowledge Base Option NOT Present");
            Assert.IsTrue(headerSupportDropSubFaq.Displayed, "Header - Support - FAQ Option NOT Present");
            Assert.IsTrue(headerSupportDropSubTicket.Displayed, "Header - Support - Submit Request Option NOT Present");
        });


        IWebElement emailTextInputField = driver.FindElement(By.CssSelector("div.col-md-10:nth-child(2)"));
        IWebElement saveBut = driver.FindElement(By.CssSelector(".btn"));
        IWebElement body = driver.FindElement(By.TagName("body"));


        Assert.Multiple(() =>
        {
            Assert.IsTrue(body.Text.Contains("Profile"),"Profile Text NOT Present");
            Assert.IsTrue(body.Text.Contains("Email"),"Email Text NOT Present");
            Assert.IsTrue(body.Text.Contains("© 2018 - Stage Front Tickets"),"Copyright Text NOT Present");
            Assert.IsTrue(emailTextInputField.Displayed, "Email Text Input Field NOT Present");
            Assert.IsTrue(saveBut.Displayed, "Save Button NOT Present");
        });


        driver.Close();

    }

Ответы [ 2 ]

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

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

Вам необходимо добавить некоторое время ожидания перед выполнением следующего шага.Например.waitTillElementPresent

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

Возможно, вы ищете такое решение:

    public IWebElement Get(By byLocator, double seconds = 10)
    {
        IWebElement element = null;

        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(seconds));
        try
        {
            element = wait.Until(ExpectedConditions.ElementExists(byLocator));
        }
        catch (Exception) { }

        return element;
    }

Или вы можете подождать, пока оно будет активировано.

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