【问题标题】:JavaFX apllication does not run with Selenium WebDriverJavaFX 应用程序不能与 Selenium WebDriver 一起运行
【发布时间】:2017-06-29 11:00:29
【问题描述】:

我想在 JavaFX 应用程序中使用 Selenium WebDriver,我想获取网页的屏幕截图并将其显示在 JavaFX 应用程序的 ImageView 中。

此代码完全可以截取网页截图并保存:

package application;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

public class Main{

    public static void main(String[] args) throws Exception {

        File file = new File("E:\\Eclipse_Projects\\phantomjs-2.1.1-windows\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
        System.setProperty("webdriver.gecko.driver","C:\\geckodriver-v0.14.0-win64\\geckodriver.exe");
        System.setProperty("phantomjs.binary.path", file.getAbsolutePath());

        WebDriver driver = new PhantomJSDriver();
        driver.get("http://google.com");

        // taking screenshot
        File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(screenshot, new File("screenshot.png"));

        driver.close();

        System.out.println("Done!");    
    }
}

为了在 JavaFX 应用程序中使用保存的屏幕截图,我尝试对此类进行一些简单的修改以使其成为 JavaFX 应用程序。

这里是修改后的代码:

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

import javafx.application.Application;
import javafx.stage.Stage;

public class Main extends Application{

    public static void main(String[] args) throws Exception {

        File file = new File("E:\\Eclipse_Projects\\phantomjs-2.1.1-windows\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
        System.setProperty("webdriver.gecko.driver","C:\\geckodriver-v0.14.0-win64\\geckodriver.exe");
        System.setProperty("phantomjs.binary.path", file.getAbsolutePath());

        WebDriver driver = new PhantomJSDriver();
        driver.get("http://google.com");

        // taking screenshot
        File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        FileUtils.copyFile(screenshot, new File("screenshot.png"));

        driver.close();

        System.out.println("Done!");

        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {

        primaryStage.show();
    }
}

这是最简单的 JavaFX 应用程序之一,在 main 方法中有一些代码,当我运行它时,它应该保存屏幕截图并打开一个空白的 JavaFX 应用程序。但是当我运行它时,它什么也不做,甚至不执行 main 方法。它会在 1-2 秒后终止,不做任何事情。

然后我意识到当 Selenium Webdriver 库位于构建路径中时,JavaFX 应用程序不会运行。即使我从类中删除所有 Selenium 内容,最终也会出现同样的问题。

package application;

import javafx.application.Application;
import javafx.stage.Stage;

public class Main extends Application{

    public static void main(String[] args) throws Exception {

        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {

        primaryStage.show();
    }
}

仅当我从项目的构建路径中删除 Selenium WebDriver 库时,上面的代码才会运行。

我已经在两个 IDE 中尝试过这些: 在 Eclipse 中,程序在 1-2 秒后终止,没有做任何事情,也没有任何错误。 在 NetBeans 中,程序在 1-2 秒后终止,没有做任何事情,但它给了我一个错误:

C:\Users\User\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: -1073740791
BUILD FAILED (total time: 2 seconds)

我用 Java 写代码快 2 年了,但这是我第一次遇到这样的问题。我google了很多,没有找到类似的东西。

有没有人知道这里发生了什么以及有什么问题?任何想法将不胜感激。

编辑:当我在 IDE 之外运行生成的 jar 文件时,它可以正常工作。

感谢您的考虑。

【问题讨论】:

  • 只是一个小提示,因为我在同一个主题上:github.com/anthavio/phanbedder 使用该依赖项让 phantomjs 成为您的应用程序的一部分...您是否尝试在您的外部执行生成的 jar 文件IDE?
  • @FibreFoX,感谢您的评论。我只是尝试执行生成的 jar 文件,它工作正常。我认为问题出在 IDE 上。
  • @yalchin.av - 我很快尝试使用您的示例,但无法重现您的问题。 JavaFx 应用程序可以工作(我对 JavaFx 不太了解,但我对 Selenium 了解很多)。也许您可能想分享您的依赖项(我使用 Maven)...我的类路径中有 selenium 3.0.1。 FWIW,我使用 IntelliJ
  • @KrishnanMahadevan - 我使用一个普通的 java 项目(不是 maven),我的类路径中有 selenium 3.0.1。我打算试试 IntelliJ,可能是 IDE 相关的问题

标签: java selenium javafx automation phantomjs


【解决方案1】:

我刚刚找到了这个问题的原因。该问题与 NVIDIA 驱动程序有关。我使用的是 378.49 版本,然后回滚到 376.33 版本。现在,问题解决了。更多详情请到https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000060510-Process-finished-with-exit-code-1073740791-0xC0000409-JavaFX-Application

感谢 @KrishnanMahadevan 提醒我使用 IntelliJ IDE。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    相关资源
    最近更新 更多