簡體   English   中英

量角器Jasmine中規格說明中的瀏覽器功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM