量角器在使用browser.restart()函数在新的浏览器窗口中启动另一个TC时拍摄空白屏幕截图

时间:2019-02-11 08:06:07

标签: jasmine protractor

我每次都有两个要在新浏览器中执行的规范,因此我的afterEach函数具有browser.restart()以在每次规范后重新启动浏览器。但这导致量角器拍摄空白的屏幕截图。当我删除browser.restart()时,另一个规范在同一浏览器窗口中运行,这导致规范失败。任何线索都会有所帮助。

下面是我的conf.js

onPrepare: function()
{
    jasmine.getEnv().addReporter(
        new Jasmine2HtmlReporter({
        savePath: 'target/screenshots',
            takeScreenshots: true,
            takeScreenshotsOnlyOnFailures: false
        })
    );
},

下面是我的Spec.js

afterEach(function(){
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
browser.restart();
});

实际代码

browser.wait(EC.visibilityOf(element(by.id("siteId"))),5000);
element(by.id("files")).click();
browser.actions().sendKeys(protractor.Key.ENTER).perform();
element(by.id("toggleFilter")).element(by.xpath('div/div/form/div[4]/div/button[2]')).click();
element(by.id("toggleFilter")).element(by.xpath('div/div/form/div[1]/div[1]/div/span')).getText().then(function(msg){
    expect(msg).toBe(pre.errorMsg);
})

2 个答案:

答案 0 :(得分:0)

不要使用browser.restart() 对于新的浏览器窗口,您可以使用以下代码:

 browser.getAllWindowHandles().then(function (handles) {
    const newWindowHandle = handles[1]; // this is your new window
    browser.switchTo().window(newWindowHandle).then(function () {
      return browser.getCurrentUrl()
      });
        });

答案 1 :(得分:0)

我相信这是因为Jasmine在其specDone钩子中创建了失败屏幕截图,但是直到Protractor的afterEach钩子已经完成之后才调用它,从而在截图之前重新启动浏览器采取行动被触发。您应该通过移动浏览器进行测试。重新启动到beforeEach挂钩,看看它现在是否按预期运行。

但是从长远来看,对于进行任何操作之前要重新启动浏览器的第一个测试来说并不理想。 See this issue,因为它列出了另一种可以帮助您的方法

挂钩执行顺序

--- beforeLaunch           
    --- onPrepare          
      --- jasmineStarted   (set in jasmine reporter)
        --- beforeAll
         --- suiteStarted  (set in jasmine reporter)
          --- specStarted  (set in jasmine reporter)
           --- beforeEach  
           +++ afterEach   
          +++ specDone     (set in jasmine reporter)
         +++ suiteDone     (set in jasmine reporter)
        +++ afterAll
      +++ jasmineDone      (set in jasmine reporter)
    +++ onComplete         
+++ afterLaunch