当我通过计划java代码运行我的测试并使用WebDriver的close()方法时,它正在关闭相应的浏览器实例。但是当我在任何@After注释中的testNG类中使用driver.close()时
@AfterClass
public void logout()
{
driver.findElement(By.id(someSignOutId)).click();
driver.close();
}
然后它没有关闭浏览器实例。 请尝试以下2个代码段: TestNGSnippet:
package unitTest.myTest;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
public class GoogleTestNGTest {
@Test
public void f() throws InterruptedException
{
WebDriver driver=new FirefoxDriver();
driver.get("http://www.google.com");
Thread.sleep(2000);
driver.close();
}
}
Plain Snippet:
package unitTest.myTest;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class GoogleTest
{
public static void main(String[] args) throws InterruptedException
{
WebDriver driver=new FirefoxDriver();
driver.get("http://www.google.com");
Thread.sleep(2000);
driver.close();
}
}
这是testNG中的错误吗?注意:driver.quit()正在工作,但我无法使用它,因为当我并行运行我的测试时,它将关闭所有仍在运行测试的浏览器实例。 TIA! Selenium WebDriver版本:2.33 TestNG:6.8.5 Firefox版本:22 Java:1.7.0.40
答案 0 :(得分:2)
不是 TestNG中的错误。
如果有的话,这是Selenium中的一个错误。请记住,driver.close()
将关闭活动窗口...这意味着如果测试打开了多个窗口,则需要关闭所有窗口。
你说你并行运行多个测试...我希望你使用多个驱动程序实例....并非所有驱动程序都运行在同一个驱动程序上。如果是这种情况,那么可以调用driver.quit()
,因为它只会退出当前实例。
但是,如果您设法在运行不同代码的单个驱动程序上设置了多个窗口...那么我无法帮助您,除了建议切换到多个实例(这更稳定)。
答案 1 :(得分:2)
大家好,截至目前,我已找到一种解决方法,可以从testNG关闭驱动程序。请参阅下面的解决方法:
package unitTest.myTest;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
public class GoogleTestNGTest {
@Test
public void f() throws InterruptedException
{
WebDriver driver=new FirefoxDriver();
driver.get("http://www.googl.com");
Thread.sleep(2000);
driver.close();
try
{
driver.get("someURL");
}
catch(UnreachableBrowserException e){}
}
我发现浏览器会话已经过期了。但它只是没有关闭的浏览器窗口。所以当我们再次使用一些url尝试相同的驱动程序实例时。它关闭了浏览器。我希望这种解决方法能够帮助面临类似问题的其他用户。
答案 2 :(得分:0)
这种解决方法很好,但是这里的任何人都可以解释为什么这个功能不起作用?我所有的@AfterSuite @BeforeSuite和@Test都在同一个班级。但是driver.close仍然无法正常工作,而driver.quit正常工作,但是driver.quit会关闭所有浏览器,所以只想使用不关闭浏览器的driver.close。
答案 3 :(得分:0)
Driver.close
,有时您导航到新页面时无法正常工作。
所以解决方法是等待页面加载(使用Thread.sleep
)或增加默认超时。
之后尝试driver.close()
,它会起作用。