量角器:如何在一个规范执行结束后保持浏览器实例运行

时间:2016-12-02 07:15:19

标签: javascript protractor

我们有一个应用程序,它具有多个要验证的功能。 我创建了几个用于测试单个特征的量角器规格。该应用程序要求用户在访问功能之前登录它。为此,我还有一个规范将打开浏览器并登录到应用程序。 期望是,其他规范将使用此会话(由登录规范创建和验证)进行验证。 但是一旦登录规范结束,浏览器会话就会关闭。

当我从http://127.0.0.1:4444/wd/hub/static/resource/hub.html位置创建会话并在conf.js文件中将其提供给属性名称seleniumSessionId时,会话不会被关闭。 但我需要从登录脚本创建此会话,以便可以删除创建会话并在conf.js文件中传递它的手动工作。

3 个答案:

答案 0 :(得分:1)

我所做的是,我在我的配置文件onPrepare()函数中进行日志记录:

onPrepare: function() {
    browser.driver.get(browser.params.url);
    browser.driver.findElement(by.id('loginInput')).sendKeys('login');
    browser.driver.findElement(by.id('passwordInput')).sendKeys('password');
    browser.driver.findElement(by.id('submitButton')).click();
    return browser.driver.wait(function() {
       return browser.driver.getCurrentUrl().then(function(url) {
         return true;
       });
    }, 30000);
}

如果出于某种原因,您的网站在重新加载页面后关闭会话(这可能很奇怪),您可以将此代码移至beforeEach()函数,甚至在配置文件中将其附加到您的全局对象并使用它在你的测试中的任何地方。

global.loginToPage = function() {
   browser.driver.get...
}

在你的测试中,将其称为标准函数。

答案 1 :(得分:0)

所以你需要做的就是传递会话ID:

protractor spec.js --seleniumSessionId=<session id>

Protractor中有一个例子。在scripts/attachSession.js中,该文件向selenium独立服务器发出请求并创建新会话。创建会话后,它将运行Protractor测试。由于您提供会话Protractor will not close down the session,因此您负责发送删除会话请求。

另请注意,您可以添加seleniumSessionId标志也可以是量角器配置中的属性。

(huzzah是我今年早些时候写的一篇专题文章)

答案 2 :(得分:0)

将eeach函数放入登录之前,然后将测试放入“it”块

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ConcurrentTaskScheduler;

@SpringBootApplication
@EnableScheduling
@EnableAsync
public class Application {

    @Bean
    public TaskScheduler taskScheduler() {
        return new ConcurrentTaskScheduler();
    }


    public static void main(String[] args) throws Exception {
        ApplicationContext ctx = SpringApplication.run(Application.class);

        ScheduledTasks scheduledTasks = ctx.getBean(ScheduledTasks.class);

        scheduledTasks.scheduleAllCrons();
    }
}