2017-04-10 71 views
0

當前使用帶有Javascript的黃瓜量角器框架的Protractor 5.1.0。使用黃瓜場景示例中的同一頁面

在特徵文件中使用以下方案概述:

Feature: As an online customer 
I should be able to validate the Benefits Page and links on it 

Background: 
Given I am on the "Benefits Page" 

@regression @fixup 
Scenario Outline: validation of the MyPage links 
When I click on the "<link>" link 
Then a new tab should be opened 
Then I should be directed to the "<URL>" in new window 

Examples: 
|link     |URL          | 
|Benefit (PDF)   |/guide-to-benefit.pdf     | 
|Pro Benefit (PDF)  |/professional-benefit.pdf    | 
|Signature Benefit (PDF) |/signature-guide-to-benefits-revised.pdf | 
|Business Benefit (PDF) |/business-benefits.pdf     | 

和頁面文件如下:

var Benefits_Guide_Page = function (PageUrl) { 

    this.visit = function (PageUrl) { 
    browser.manage().deleteAllCookies(); 
    browser.get(PageUrl); 
}; 

this.get_element = function (element_name) { 
    switch (element_name) { 

    //Links Navigates to different window 

    case "Benefit (PDF)": 
    case "Pro Benefit (PDF)": 
    case "Signature Benefit (PDF)": 
    case "Business Benefit (PDF)": 
    return element(by.linkText(element_name)); 
    break; 

    ... // continue element checks 

每個場景打開的標籤,切換到新的選項卡,驗證網址,關閉新標籤,切換到原來的標籤,重載原來的頁面,開始下一個例子

我覺得有一個答案的this Android Q&A東西,但我不知道這是同樣的問題。

基本上,我並不需要的頁面,每個例子重裝。在更大的測試環境中浪費和浪費時間。

我還有其他的場景中我檢查在同一窗口中加載的鏈接。我只需要「返回」並檢查下一個鏈接或同一頁面定位點,而不是再次加載頁面。

任何提示?

+0

在新選項卡中打開新頁面的情況 - 重新加載原始頁面的原因是什麼?由於新選項卡,是否對原始頁面有任何影響?如果沒有,那麼不要重新加載原始頁面...在同一個標​​籤中打開新頁面的情況 - 你嘗試過browser.navigate()。back()返回到原始頁面的一步嗎?... – Grasshopper

+0

我是猜測你一開始就要進入頁面?你可以把它包裝在if語句中。如果我不在此頁面上,請獲取頁面。這意味着它會執行一次或失敗。 –

+0

@Grasshopper和@ kyle-fairns,增加了一些更多的上下文。 _重新加載原始頁面的原因是什麼?_ **無**,我可以告訴。它似乎是頁面定義文件的結果,但我不確定它是如何組織的。如果每個_example_調用頁面定義,那麼我可能會被卡住。 _note_我繼承了這個爛攤子。此頁面需要2分鐘才能檢查,因爲他們在每次運行中放置了5秒的「睡眠」,因爲他們沒有正確使用Promises等待。減少到30秒。如果我能解決重裝問題,我想我可以削減更多。 – javafueled

回答

1

情景大綱只是一個簡明寫幾個場景的方式。每個場景從頭開始,因此會加載初始頁面。如果您想使其更高效,請不要使用場景輪廓並寫出更少的場景。

我真的不明白爲什麼你需要測試瀏覽器可以瀏覽到其他窗口,我認爲我們非常有信心,點擊瀏覽器中的鏈接的作品,讓你真正需要做的是測試鏈接或頁面上。所以,你 可以寫

Given I am on the benefits page 
Then I should see the benefits pdf's 

,並引入benefits_pdfs集合的概念,這樣做

benefits_pdf.each do |pdf| 
    page.should have_link pdf.link 
end 
在您的實現

。這給你一個場景,運行速度可能快10倍,並提供幾乎相同的效用。