我想我誤解要素如何運作..量角器:尋找合適的元素來測試
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(」 選擇 「)」
後者適用於我,其他方面是錯誤的。你能展示你的完整測試/規格嗎?你正在使用哪種量角器版本? – alecxe
更新了一些更多的代碼。這是試圖測試生成大量代碼的可編輯的庫。不知道我在這裏錯過了什麼。 – Jason
我找到了。 id'div-item'在另一個頁面中使用。由於角是單頁,因此它正在拾取另一個.html文件中的元素。 – Jason