gpt4 book ai didi

selenium - restartBrowserBetweenTests 与 onPrepare() 之间的交互

转载 作者:行者123 更新时间:2023-12-02 21:55:28 39 4
gpt4 key购买 nike

我希望每个测试都在干净的浏览器 (Firefox) 上运行,因此我使用 restartBrowserBetweenTests:true 选项。因为我使用非 Angular 演示应用程序,所以在 onPrepare() 函数中我使用 browser.waitForAngularEnabled(false)。当我运行单个规范时,它工作正常,但是当我运行 2 个规范时,我遇到错误。

在页面上找不到 Angular。如果这不是 Angular 应用程序,您可能需要关闭等待 Angular。

我该如何解决这个问题?此外,在这种情况下,onPrepare 是如何工作的 - 每次浏览器启动时或在所有规范之前一次?

这是我的conf.js

const screenshotReporter = require('./screenshotCustomReporter')

exports.config = {
capabilities: {
browserName: 'firefox'
},

restartBrowserBetweenTests: true,

framework: 'jasmine',
directConnect: true,

baseUrl: URL,

specs: ['path/**/*Spec.js'],

// Options to be passed to Jasmine.
jasmineNodeOpts: {
defaultTimeoutInterval: 30000,
includeStackTrace: true
},

onPrepare: () => {
require("@babel/register");

jasmine.getEnv().addReporter(screenshotReporter)
browser.waitForAngularEnabled(false)
}
}

<小时/>

您可以使用以下简单项目重现此问题:

conf.js

exports.config = {
framework: 'jasmine',
specs: ['./app.1.js', './app.2.js'],
seleniumAddress: 'http://localhost:4444/wd/hub',
restartBrowserBetweenTests:true,
onPrepare:function(){
browser.waitForAngularEnabled(false);
},
}

app.1.js

describe('second test', () => {
it('should check is displayed successfully', () => {
browser.driver.get("https://stackoverflow.com");
browser.driver.sleep(5000);
expect(element(by.linkText('Ask Question')).isDisplayed()).toBe(true);
});
});

app.2.js

describe('first test', () => {
it('should check is displayed successfully', () => {
browser.driver.get("https://stackoverflow.com");
browser.driver.sleep(5000);
expect(element(by.linkText('Ask Question')).isDisplayed()).toBe(true);
});
});

最佳答案

OnPrepare 是为套件需要执行的所有设置而定义的。就是这个意思无论规范文件的数量有多少,始终是一次性操作。

您需要理解的一个概念是,每当新实例Firefox 浏览器启动后,WebdriverJs 初始化 webdriver 的实例。 Protractor 中的全局对象浏览器也被初始化。

在您的情况下,第一个规范文件启动 Firefox 浏览器,随后执行 OnPrepare 函数, Protractor 的默认设置被 WaitForAngularEnabled 覆盖。但是当您运行第二个规范文件时,Firefox 浏览器再次启动,并带有新的 webdriver 和 Protractor 浏览器实例,预计角度应用程序,在这种情况下测试用例会失败。

解决这个问题的方法是在spec文件中使用before函数

describe('first test', () => {
before(() => {
browser.waitForAngularEnabled(false);
});

it('should check is displayed successfully', () => {
browser.driver.get("https://stackoverflow.com");
browser.driver.sleep(5000);
expect(element(by.linkText('Ask Question')).isDisplayed()).toBe(true);
});
});

注意:如果您使用 restartBrowserBetweenTests: true 那么您将必须使用 beforeEach() 函数来等待 waitForAngularEnabled,因为每次都会创建新的 webdriver 实例。

关于selenium - restartBrowserBetweenTests 与 onPrepare() 之间的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56379706/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com