一尘不染

维护和重复使用现有的WebDriver浏览器实例-Java

selenium

基本上,每次我从eclipse运行Java代码时,webdriver都会启动一个新的浏览器并成功地执行我的测试。但是,我有很多测试需要运行,并且每次Webdriver都要启动一个新的浏览器会话是一件很痛苦的事情。我需要一种方法来重新使用以前打开的浏览器;因此,webdriver将在第一次运行时打开,然后在第二次运行时运行eclipse程序,我希望它可以简单地选择以前的浏览器实例并继续在同一实例上运行测试。这样,我不会在每次运行程序时都启动新的浏览器会话。

假设您有100个要在eclipse中运行的测试,请单击该“运行”按钮,它们都将运行,然后在第87个测试中出现错误。然后,您返回eclipse,修复该错误,但是您必须重新从头开始重新运行所有100个测试。

最好在第87个测试上修复错误,然后从第87个测试中恢复执行,而不是从头开始重新执行所有测试,即从测试0一直执行到100。希望,我足够清楚可以得到谢谢大家的帮助。

这是我下面尝试维护和重新使用Webdriver Internet Explorer浏览器实例的尝试:

public class demo extends RemoteWebDriver {

    public static WebDriver driver;
    public Selenium selenium;
    public WebDriverWait wait;
    public String propertyFile;
    String getSessionId;


    public demo() { // constructor


        DesiredCapabilities ieCapabilities = DesiredCapabilities
                .internetExplorer();
        ieCapabilities
                .setCapability(
                        InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,
                        true);
        driver = new InternetExplorerDriver(ieCapabilities);


        this.saveSessionIdToSomeStorage(getSessionId);
        this.startSession(ieCapabilities);
        driver.manage().window().maximize();
    }

    @Override
      protected void startSession(Capabilities desiredCapabilities) {
        String sid = getPreviousSessionIdFromSomeStorage();
        if (sid != null) {
          setSessionId(sid);
          try {
            getCurrentUrl();
          } catch (WebDriverException e) {
            // session is not valid
            sid = null;
          }
        }
        if (sid == null) {
          super.startSession(desiredCapabilities);
          saveSessionIdToSomeStorage(getSessionId().toString());
        }
      }

    private void saveSessionIdToSomeStorage(String session) {
        session=((RemoteWebDriver) driver).getSessionId().toString();
    }

    private String getPreviousSessionIdFromSomeStorage() {
        return getSessionId;
    }
}

我的希望是,通过从remoteWebdriver覆盖startSession()方法,它将以某种方式检查我是否已经在ie中打开了一个webdriver浏览器实例,并且它将代替每次创建新实例来使用该实例。蚀中的“运行”按钮。

我还可以看到,因为我正在从构造函数创建“新驱动程序实例”,因为构造函数始终首先执行,所以它将自动创建该新驱动程序实例,因此我可能需要以某种方式进行更改,但不知道如何。

我是Stackoverflow和Selenium Webdriver的新手,希望这里有人可以提供帮助。

谢谢!


阅读 556

收藏
2020-06-26

共1个答案

一尘不染

要回答您的问题:

不可以。您不能使用计算机上当前正在运行的浏览器。但是,只要它在同一执行上,就可以对不同的测试使用相同的浏览器。

但是,听起来您的真正问题是一次又一次地运行100个测试。我建议使用测试框架(例如TestNG或JUnit)。有了这些,您可以指定要运行的测试(TestNG将生成所有失败测试的XML文件,因此,当您运行它时,它将仅执行失败的测试)。

2020-06-26