我每次都有两个要在新浏览器中执行的规范,因此我的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);
})
答案 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