1

我使用NightWatch.js和一些UI測試以及我想用一些額外的desiredCapabilities啓動默認瀏覽器實例(即擴展名是啓用了一些特定的值)。在默認的NightWatch瀏覽器實例(特別是ModHeader擴展)中啓用和修改Chome擴展

注意:我可以執行操作,但不在默認瀏覽器實例內。

是完全清楚,在做動作手動樣子: ModHeader-Extension 鏈接擴展:https://chrome.google.com/webstore/detail/modheader/idgpnmonknjnojddfkpgkljpfnnfcklj

我能夠啓用擴展並更新使用存儲在pageObject文件中此命令的值:

setChromeOptions(url) { 
    const chromeCapabilities = webdriver.Capabilities.chrome(); 

    // setting chrome options 
    const chromeOptions = { 
    args: 

    // path to local ModHeader extension 
    ['--load-extension=/Users/raja.bellebon/AppData/Local/Google/Chrome/User Data/Default/Extensions/idgpnmonknjnojddfkpgkljpfnnfcklj/2.1.2_0/'], 
    }; 

    chromeCapabilities.set('chromeOptions', chromeOptions); 
    const driver = new webdriver.Builder().withCapabilities(chromeCapabilities).build(); 
    driver.get('chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/_generated_background_page.html'); 

    // setup ModHeader extension with the header value 
    driver.executeScript(` 
    localStorage.setItem('profiles', JSON.stringify([{ /* eslint-env browser*/ 
     title: 'Selenium', 
     hideComment: true, 
     appendMode: '', 
     headers: [ 
     { enabled: true, name: 'X-Static-Homepage', value: 'true' }, 
     ], 
     respHeaders: [], 
     filters: [], 
    }]))`); 
    driver.get(url); 
    return this; 
} 

該函數的調用在測試開始時(如第一步或內部的before)。當我執行代碼時,會打開第二個瀏覽器窗口,並在內部執行操作。同時,主要(或默認)瀏覽器實例沒有擴展名。 如何修改主瀏覽器實例中的擴展?

閱讀了幾個博客後,我發現我可能需要修改conf.js並在那裏應用我的代碼,但是我無法獲取/修改當前驅動程序。

我被困在一個巨大的頭痛......任何幫助將不勝感激,謝謝!

+0

嘿,謝謝你的回答!你確定它有效嗎?我記得我能夠使用modHeader set..but啓動頁面,但不幸的是,我有兩個標籤打開,其中一個標頭被設置,另一個標籤被執行...如果你只有一個標籤並且測試被執行在設置了標題的頁面內 - Nice !!! – Raja

回答

1

對不起,回覆遲了。我只是想出瞭如何做到這一點,所以想要分享,如果你將來需要它。

首先,在你的nightwatch.json文件中,設置所需的能力,如下圖所示:

"desiredCapabilities": { 
    "javascriptEnabled": true, 
    "acceptSslCerts": true, 
    "browserName": "chrome", 
    "chromeOptions": { 
     "args": ["--load-extension=/home/pratik/.config/google-chrome/Default/Extensions/idgpnmonknjnojddfkpgkljpfnnfcklj/2.1.2_0"] 
    } 
    } 

然後在您的測試,

before: (client) => { 
    modHeaderPage = client.page.modHeaderPage(); 
    modHeaderPage.setHeader(); 
    homePage = client.page.homePage(); 
} 

和你的頁面對象將如下樣子:

module.exports = { 
    elements: {}, 
    commands: [{ 
    setHeader() { 

     // set the context on the extension so the localStorage can be accessed 
     const url = 'chrome-extension://idgpnmonknjnojddfkpgkljpfnnfcklj/2.1.2_0/settings.tmpl.html'; // modHeader extension 
     this.navigate(url).waitForElementPresent('body', 20000); 

     // setup ModHeader with header 
     this.api.execute(` 
     localStorage.setItem('profiles', JSON.stringify([{ /* eslint-env browser*/ 
      title: 'Selenium', 
      hideComment: true, 
      appendMode: '', 
      headers: [ 
      { enabled: true, name: 'Header_Name', value: 'Header_Value' }, 
      ], 
      respHeaders: [], 
      filters: [], 
    }]))`); 
    }, 
    }], 
};