Java:如何将整个对象存储到外部位置并重用它来重新创建对象以供以后使用?

标签 java serialization selenium-webdriver webdriver

我正在寻找一种将实例化对象及其所有属性存储到外部位置并稍后重用的方法。

到目前为止我尝试过的:
我遇到了这个[Serialization?]回答并尝试了它,但我得到的对象是空的。

算法/粗略代码:

@Listeners(TestListener.class)
public class TestRunner {
    protected static Driver driver; //Driver implements WebDriver interface

    //Step 1
    public void method1(){
    driver = new Driver(1); //creates a customized chromedriver instance. Chrome driver / browser session is opened here.
    }

    //Step 2
    public void method2(){
        try {
            FileOutputStream fileOut = new FileOutputStream("card.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            out.writeObject(driver); 
            out.close();
            fileOut.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    //Step 3
    //Just manually stop the test/debugger for testing

    //Step 4
    public void method4(){
        try {
            FileInputStream fileIn = new FileInputStream("card.ser");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            driver = (Driver) in.readObject(); //here driver returns as null. In this line, im hoping to recreate the previous object to somehow control the browser again
            in.close();
            fileIn.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

一些信息:
这实际上与 this 中的 Selenium WebDriver 问题有关。所以问题。

所以我想做的是:

  • 第 1 步:创建 chrome 驱动程序的自定义实例
  • 步骤 2:使用上述代码将创建的对象存储到外部源中
  • 第3步:我故意停止测试来模拟失败
  • 步骤 4:我尝试通过读取存储的源来重新创建先前的对象。

    我之前没有序列化背景,我不确定我想做的事情是否可行。非常感谢任何帮助或指导。

  • 最佳答案

    假设 Driver 类也实现了 Serialized,我在代码中看到的一个问题是,驱动程序被声明为 protected 静态 Driver 驱动程序,但假设创建此类实例的方法 1 永远不会被执行,因此您不会执行当您序列化它时,没有该对象。在序列化之前尝试调用方法 1,如下所示:

     public void method2(){
        try {
            FileOutputStream fileOut = new FileOutputStream("card.ser");
            ObjectOutputStream out = new ObjectOutputStream(fileOut);
            method1();
            out.writeObject(driver); 
            out.close();
            fileOut.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    

    关于Java:如何将整个对象存储到外部位置并重用它来重新创建对象以供以后使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43991767/

    相关文章:

    javascript - 无法在 Node.js 中使用 Selenium Webdriver 检索 Chrome 控制台的内容

    java - 使用正斜杠解析 json

    java - 为什么Java找不到主类?

    java - 预订应用程序中的 NullPointerException

    java - beforeClass测试方法运行两次Testng

    java - jackson 将不同的字符串反序列化为相同的枚举常量

    python - Selenium Python Firefox webdriver : can't modify profile

    java - 在 Java 中使用序列化(使用 writeObject 方法)写入文件

    java - 在 Java 中返回二维对象类型数组

    python - 无法在 selenium 和 requests 之间传递 cookie,以便使用后者进行抓取