2015-01-07 52 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是一个单页面应用程序,它正在选择一个而不是我想要的应用程序。