[英]Browser capabilities in spec description in Protractor Jasmine
我想為一個測試用例生成兩個單獨的報告。 為此,我在測試中使用browser.getCapabitities
方法來獲取瀏覽器的名稱和版本。
現在,當我在規格說明的末尾使用此變量時,該值是undefined
。 browserNameforSpec
在獲取描述之前已經獲得了價值。 僅在規范末尾使用此值時,它才顯示未定義。 我不知道發生這種情況的原因。 在測試開始之前,是否有任何方法可以更改此規范描述的名稱。
我的代碼是
let capsPromise = browser.getCapabilities();
let browserNameforSpec;
capsPromise.then(function(caps) {
console.log(caps);
let browserName = caps.get('browserName');
let browserVersion = caps.get('version');
browserNameforSpec = browserName + '-' + browserVersion + '-';
console.log(browserNameforSpec);
});
describe( '0030 Test for login' + browserNameforSpec, function () { // this.browserNameforSpec value is undefined
// 1.
it('Navigate to the login page', async () => {
await navigate.to.the(loginPage);
});
// 2
it('Click onto language button', async() => {
await click.onto(languageButton);
await expect(languageDropdown.isDisplayed());
});
// 3
it('English Language is selected', async() => {
await click.onto(englishLanguage);
await expect(languageButton.getText()).toBe('English');
});
// 4.
it('Correct user name is written into email field', async() => {
await usernameField.click();
await enter(correctUsername, into(usernameField));
});
// 5.
it('Correct password is written into password field', async() => {
await passwordField.click().then(function () {
passwordField.clear();
enter(correctPassword, into(passwordField));
})
});
// 6.
it('Login button is clicked and home page is opened', async() => {
await click.onto(loginButton);
});
});
問題是: 1.您正在使用this.browserNameforSpec,它將隨着函數上下文的更改而未定義,您已將browserNameforSpec聲明為在所有函數中都直接可用的變量,但您正在對此進行調用) 2 . browser.getCapabilities()返回Promise的實例,這就是執行流程不同的原因。 首先,它正在執行此函數和describe()。 但。 它們需要以同步方式調用。
下面的代碼使用另一個.then來按順序執行它。 嘗試使用以下代碼:
let capsPromise = browser.getCapabilities(); let browserNameforSpec; capsPromise .then(function(caps) { console.log(caps); let browserName = caps.get('browserName'); let browserVersion = caps.get('version'); browserNameforSpec = browserName + '-' + browserVersion + '-'; console.log(browserNameforSpec); }) .then(function() { describe( '0030 Test for login' + browserNameforSpec, function () { // 1. it('Navigate to the login page', async () => { await navigate.to.the(loginPage); }); // 2 it('Click onto language button', async() => { await click.onto(languageButton); await expect(languageDropdown.isDisplayed()); }); // 3 it('English Language is selected', async() => { await click.onto(englishLanguage); await expect(languageButton.getText()).toBe('English'); }); // 4. it('Correct user name is written into email field', async() => { await usernameField.click(); await enter(correctUsername, into(usernameField)); }); // 5. it('Correct password is written into password field', async() => { await passwordField.click().then(function () { passwordField.clear(); enter(correctPassword, into(passwordField)); }) }); // 6. it('Login button is clicked and home page is opened', async() => { await click.onto(loginButton); }); }); });
在您的onPrepare()
添加以下代碼
browser.getCapabilities().then(function (cap) {
browser.browserName = cap.caps_.browserName;
});
您按如下方式進行測試
describe( '0030 Test for login' + browser.browserName, function () {
// 1.
it('Navigate to the login page', async () => {
await navigate.to.the(loginPage);
});
希望對您有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.