为什么IWebDriver类的实例会在迭代中引发异常?

时间:2016-02-10 14:52:56

标签: c# selenium webdriver

我正在使用selenium web驱动程序开发应用程序。我在'for'循环中放了一组任务。任务是:

  • 使用IWebDriver类的驱动程序对象打开URL。
  • 遍历不同的不同网址
  • 在for循环中,我使用以下命令杀死IWebDriver类的实例: driver.Close(); driver.Quit();

现在,当第二次迭代开始时,程序不执行上述任务,而是提供异常。

当我研究异常时,我发现问题出在driver.Close(); driver.Quit();上。它甚至没有关闭浏览器,但它也删除了IWebDriver类的实例。我该如何处理这种情况?

以下是示例代码:

class callingfunction
{
    public static IWebDriver driver = new ChromeDriver(Cpath);

    public void function1()
    {
        for (int i = 0; i < 10; i++ )
        {
           driver.Navigate().GoToUrl("http://www.aaa.org");
           driver.Navigate().GoToUrl("http://www.aaa.org/contactus");
           driver.FindElement(By.Name("contact")).SendKeys(contact);
           driver.Navigate().GoToUrl("http://www.aaa.org/aboutus");
           //Code logic 

           driver.Close();
           driver.Quit();
        }   
    }
}

2 个答案:

答案 0 :(得分:0)

您在循环中的WebDriver 上调用quit(),因此在第二次迭代中,您确实会遇到错误。

您需要的唯一地方就在您的测试的最终close()电话也是不必要的。

此外,您还没有等待加载任何内容,因此如果driver.FindElement(By.Name("contact")).SendKeys(contact); - title: Title description: Lorem Ipsum ..... link: http://link.com social: facebook sociallink: http://facebook.com - title: Title2 description: Lorem Ipsum ..... link: http://link.com {{}}},您的{% for member in site.data.info %} ##[{{ member.name }}]({{ member.link }}) {{ member.description }} [{{ member.social }}]({{ socialLink }}) {% endfor %} 可能会失败。

最后,您没有对第1页或第3页请求做任何事情,因此 - 由于缺少等待 - 这些页面可能永远不会被允许完全加载。

答案 1 :(得分:0)

我不明白你想要完成的场景,但我希望在简化代码的过程中,你已经删除了使这个场景更有意义的位。说完了......

问题是您正在关闭并退出for循环内的浏览器驱动程序,但从未实例化其他浏览器实例。执行new ChromeDriver()时会创建浏览器实例,因此您需要在for循环内部。这样的事情应该有效。

class callingfunction
{
    public static IWebDriver driver = null;

    public void function1()
    {
        for (int i = 0; i < 10; i++)
        {
           driver = new ChromeDriver(Cpath); // launch browser
           driver.Navigate().GoToUrl("http://www.aaa.org");
           driver.Navigate().GoToUrl("http://www.aaa.org/contactus");
           driver.FindElement(By.Name("contact")).SendKeys(contact);
           driver.Navigate().GoToUrl("http://www.aaa.org/aboutus");
           //Code logic 

           driver.Close(); // close browser
        }
        driver.Quit(); // close browser driver
    }
}

是否有某些原因需要在运行之间关闭浏览器?您不能只重用现有的浏览器实例吗?您的测试运行得更快......但有时需要关闭它。只有你会知道...