0
    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 与 Firefox 10.0.12 和 10 分钟前的最新 Selenium。

我可以在 Java 中做些什么来解决这个问题吗?

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

4

4 回答 4

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进程需要有足够的权限才能杀死一个进程,但还没有尝试过。

于 2013-11-15T05:19:23.450 回答
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。

于 2013-11-15T01:58:00.087 回答
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设置的超时时间时,会抛出异常,我们会捕获该异常。无论请求的页面是否在 15 秒内正确加载或是否引发异常,finally部分都将运行。

于 2021-08-08T14:43:32.740 回答
-1

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

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

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

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

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

Selenium 中用于超时的 JavaDoc 可在此处获得

于 2019-03-13T14:35:24.680 回答