我正在使用selenium web驱动程序开发应用程序。我在'for'循环中放了一组任务。任务是:
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();
}
}
}
答案 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
}
}
是否有某些原因需要在运行之间关闭浏览器?您不能只重用现有的浏览器实例吗?您的测试运行得更快......但有时需要关闭它。只有你会知道...