2015-01-07 113 views
0

我想我誤解要素如何運作..量角器:尋找合適的元素來測試

HTML代碼:

<div id="div-item"> 
    <a href="#">A link</a> 
    <form> 
     <div> 
      <select> 
       <option>1</option> 
       <option>2</option> 
      </select> 
     </div> 
    </form> 
</div> 

當我這樣做:

element(by.tagName('select')).all(by.tagName('option')).count(); 

這使我2,這是正確的

當我這樣做:

element(by.id('div-item')).element(by.tagName('select')).all(by.tagName('option')).count(); 

這給了我0我認爲鏈接元素找到子元素。這是不正確的?如何限制.all(by.tagName('option'))只在這個div中,而不是整個頁面?

這是可編輯的庫。我的HTML代碼是:

<div id="div-item" class="col-xs-3"> 
    <a id="xeditable-link" href="#" ng-if="canEdit" 
     editable-select="user_id" 
     e-ng-options="user.id as user.name for user in users" 
     onbeforesave="updateProfile({user_id: $data})"> 
     {{ showNameFromID(user_id) || 'none'}} 
    </a> 
</div> 

但是,這會產生大量的HTML代碼。它是這樣的:

<div id="div-item" class="col-xs-3"> 
    <a id="xeditable-link" href="#" ng-if="canEdit" 
     editable-select="user_id" 
     e-ng-options="user.id as user.name for user in users" 
     onbeforesave="updateProfile({user_id: $data})"> 
     {{ showNameFromID(user_id) || 'none'}} 
    </a> 
    <form ...> 
     <div class="xeditable-controle..." ...blah blah> 
      <select ...ng-options="..." blah blah> 
       <option>1</option> 
       <option>2</option> 
      </select> 
      <span> ...the buttons... </span> 
     </div> 
    </form> 
</div> 

我的測試規範:

it('should pass ...', function() { 
    element(by.id('xeditable-link')).click(); // Click the link to bring up xeditable 
    element(by.tagName('select')).click(); // Click the select to bring up the popup 
    var allOptions = element(by.id('div-item')).element(by.tagName('select')).all(by.tagName('option')); 
    expect(allOptions.count()).toBe(2); 
    for (var i = 0; i < 2; ++i) { 
     expect(allOptions.get(i).getText()).toBe(testText[i]); 
    } 
}); 

的期望陳述失敗的兩個。計數爲0,而不是2和 「NoSuchElementError:沒有使用定位器找到的元素:By.tagName(」 選擇 「)」

+0

後者適用於我,其他方面是錯誤的。你能展示你的完整測試/規格嗎?你正在使用哪種量角器版本? – alecxe

+0

更新了一些更多的代碼。這是試圖測試生成大量代碼的可編輯的庫。不知道我在這裏錯過了什麼。 – Jason

+0

我找到了。 id'div-item'在另一個頁面中使用。由於角是單頁,因此它正在拾取另一個.html文件中的元素。 – Jason

回答

1

嘗試一個CSS定位器

$$('#div-item select [option]').count() 
// The same as 
element.all(by.css('#div-item select [option]')).count() 
0

原來我有一個「div-項目'在另一個.html文件中。由於AngularJS是一個單頁面應用程序,它正在選擇一個而不是我想要的應用程序。