Selenium Force关闭Firefox

时间:2013-11-15 00:06:28

标签: selenium selenium-webdriver

    ProfilesIni profile = new ProfilesIni();
    FirefoxProfile ff = profile.getProfile("ScreenCapture");
    WebDriver driver = new FirefoxDriver(ff);
    driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
    driver.get(url);

    Thread.sleep(8000);

    File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

    driver.quit();

不应该 driver.manage()。timeouts()。implicitlyWait(15,TimeUnit.SECONDS); 15秒后强制关闭selenium生成的Firefox浏览器?浏览器只是坐着说它传输数据一小时+。基本上只是挂着说转移...

我正在捕获ajax重页,这就是为什么我要求所有内容在页面加载后等待8秒。但这应该与司机在15秒后强制关闭无关。

我哪里错了?

详情:Centos x64 6.4 with Firefox 10.0.12和最新的Selenium截至10分钟前。

我能用Java做些什么来解决这个问题吗?

问题:如何在N秒后强制关闭Selenium生成的Firefox窗口?

4 个答案:

答案 0 :(得分:2)

如果您将Junit与Java一起使用,那么可以这样: -

  @After
  public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }

注意: - 要获得应该如何编写的完整框架,只需下载用于FF的selenium IDE并将一些测试用例导出到Java / jUnit。

答案 1 :(得分:2)

我的linux知识有限,但您可以通过运行linux命令pkill来终止进程。

driver.quit();
Thread.sleep(15000); //use a poll loop instead to check process running every 1 sec 
Runtime rt = Runtime.getRuntime();
rt.exec("pkill firefox"); 

我认为java进程需要有足够的权限来终止进程,但还没有尝试过。

答案 2 :(得分:0)

为了跟进 Ardesco 的评论,示例如下:

    ProfilesIni profile = new ProfilesIni();
    FirefoxProfile ff = profile.getProfile("ScreenCapture");
    WebDriver driver = new FirefoxDriver(ff);
    driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);
    try {
        driver.get(url);
    } catch (TimeoutException e) {
        System.out.println("15 seconds were over, force continue!");
    } finally {
        File srcFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        driver.quit();
    }

try 部分将运行请求,但是当超过 pageLoadTimeout 设置的超时时间时,会抛出异常,我们捕获finally 部分将运行,无论请求的页面是否在 15 秒内正确加载或是否引发异常。

答案 3 :(得分:-1)

隐式等待不会在15秒后强制关闭浏览器。

隐式等待在尝试在DOM中查找元素时使用,在尝试加载页面时不使用。如果希望Selenium在15秒后停止尝试加载页面,则需要设置pageLoadTimeout,其用法如下:

driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);

默认页面加载超时为0(这意味着无限期等待),因此您将看到此行为。

(显然,这里假设您使用的驱动程序二进制文件已实现此方法。)

Selenium中超时的JavaDoc可用Here