维护并重用现有的webdriver浏览器实例 - java

pel*_*can 1 java selenium browser-automation selenium-webdriver remotewebdriver

基本上每次我从eclipse运行我的java代码时,webdriver都会启动一个新的ie浏览器并在大多数情况下成功执行我的测试.但是,我有很多测试要运行,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;
    }
}
Run Code Online (Sandbox Code Playgroud)


我希望在这里通过覆盖来自remoteWebdriver的startSession()方法,它会以某种方式检查我已经在ie中打开了一个webdriver浏览器的实例,而它会改为使用该实例,而不是每当我点击时重新创建一个新实例在eclipse中"运行"按钮.

我也可以看到,因为我正在从构造函数创建一个"新的驱动程序实例",因为构造函数总是先执行,它会自动创建新的驱动程序实例,所以我可能需要以某种方式改变它,但不知道如何.

我是stackoverflow和selenium webdriver的新手,希望有人在这里可以提供帮助.

谢谢!

Nat*_*ill 5

回答你的问题:

不可以.您无法使用计算机上当前运行的浏览器.但是,只要它在同一执行中,您就可以使用相同的浏览器进行不同的测试.

然而,听起来你的真正问题是一遍又一遍地运行100次测试.我建议使用测试框架(如TestNG或JUnit).通过这些,您可以指定要运行的测试(TestNG将生成所有失败的测试的XML文件,因此当您运行它时,它只会执行失败的测试).