在使用C#,Selenium web-driver和NUnit时断言没有看到元素

时间:2017-06-24 16:04:59

标签: c# selenium nunit

我正在尝试为网站编写测试脚本。我想在下一行代码运行之前使用assert来验证元素是否在页面上,调用该元素。

我正在使用带有断言的try / catch块。断言无法通过Id或Xpath查看元素。它失败了,抓住了它。 这是有趣的部分:下一行代码使用Id或Xpath相同的Web元素,它可以工作。这让我很难过。

    
    class Program
    {
        static void Main(string[] args)
        {
            var driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://www.higgins3.com/");
            System.Threading.Thread.Sleep(2000);
            //Assert try catch block to see if search box is one the page.
            try
            {
                Assert.IsTrue(driver.FindElement(By.Id("s")).Displayed);
                Console.Write("Search box display . assert Pass");
            }
            catch (Exception e)
            {
                Console.WriteLine("Can not find Search Box . assert Fail");
            }
            // End Assert

            IWebElement element1 = driver.FindElement(By.Id("s"));
            System.Threading.Thread.Sleep(2000);
            element1.Click();
            element1.SendKeys("Printer");
            System.Threading.Thread.Sleep(2000);
        }
    }

2 个答案:

答案 0 :(得分:0)

这是元素加载问题。您可以使用隐式等待或显式等待。两次等待都会在一定时间后抛出异常。在检查显示的元素之前,请尝试以下操作。

driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);

这适用于所有find元素/元素方法。

我的个人建议,在需要之前不要使用线程睡眠,因为它是静态等待。

答案 1 :(得分:0)

从NUnit捕获AssertionException几乎是不对的。在这种情况下,您可能会从Selenium获得AssertionException或超时。通过捕获Exception,您声称知道如何处理每个可能发生的异常。

你应该能够通过适当的等待没有尝试/捕获这样做。然后,在所有等待完成后,您可以断言结果。