我正在尝试为网站编写测试脚本。我想在下一行代码运行之前使用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);
}
}
答案 0 :(得分:0)
这是元素加载问题。您可以使用隐式等待或显式等待。两次等待都会在一定时间后抛出异常。在检查显示的元素之前,请尝试以下操作。
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
这适用于所有find元素/元素方法。
我的个人建议,在需要之前不要使用线程睡眠,因为它是静态等待。
答案 1 :(得分:0)
从NUnit捕获AssertionException几乎是不对的。在这种情况下,您可能会从Selenium获得AssertionException或超时。通过捕获Exception
,您声称知道如何处理每个可能发生的异常。
你应该能够通过适当的等待没有尝试/捕获这样做。然后,在所有等待完成后,您可以断言结果。