你如何找到 Protractor 中的下一个元素?
How do you find the next element in Protractor?
鉴于我有以下 HTML 代码:
<div class="someGenericClass">
<input name="someGenericName">
<label>not important</label>
</div>
<div class="someGenericClass">
<input name="someGenericName">
<label>not important</label>
</div>
<div class="someGenericClass">
<input name="someGenericName">
<label>Text I need to find in my test</label>
</div>
在这种情况下如何找到标签文本?它没有属性。
我试图找到第一个元素,然后是下一个元素,但我遗漏了一些东西:
element(by.name('someGenericName')).element(by.xpath('following::label'));
也尝试过:
element(by.name('someGenericName')).element(by.xpath('following-sibling::label'));
编辑:class 不是唯一的。它在 DOM.
中被多次使用
如果 DOM 发生变化会怎样? element.all
看来不是个好主意,对吧?
element.all 应该没问题
HTML View
<div id='id1' class="parent">
<ul>
<li class="foo">1a</li>
<li class="baz">1b</li>
</ul>
</div>
<div id='id2' class="parent">
<ul>
<li class="foo">2a</li>
<li class="bar">2b</li>
</ul>
</div>
Code
let foo = element.all(by.css('.parent')).all(by.css('.foo'));
expect(foo.getText()).toEqual(['1a', '2a']);
let baz = element.all(by.css('.parent')).all(by.css('.baz'));
expect(baz.getText()).toEqual(['1b']);
let nonexistent = element.all(by.css('.parent'))
.all(by.css('.NONEXISTENT'));
expect(nonexistent.getText()).toEqual(['']);
// Or using the shortcut $$() notation instead of element.all(by.css()):
let foo = $$('.parent').$$('.foo');
expect(foo.getText()).toEqual(['1a', '2a']);
let baz = $$('.parent').$$('.baz');
expect(baz.getText()).toEqual(['1b']);
let nonexistent = $$('.parent').$$('.NONEXISTENT');
expect(nonexistent.getText()).toEqual(['']);
element.all returns 一个承诺数组。
您可以迭代数组和链来查找输入标签后面的标签。
鉴于我有以下 HTML 代码:
<div class="someGenericClass">
<input name="someGenericName">
<label>not important</label>
</div>
<div class="someGenericClass">
<input name="someGenericName">
<label>not important</label>
</div>
<div class="someGenericClass">
<input name="someGenericName">
<label>Text I need to find in my test</label>
</div>
在这种情况下如何找到标签文本?它没有属性。 我试图找到第一个元素,然后是下一个元素,但我遗漏了一些东西:
element(by.name('someGenericName')).element(by.xpath('following::label'));
也尝试过:
element(by.name('someGenericName')).element(by.xpath('following-sibling::label'));
编辑:class 不是唯一的。它在 DOM.
中被多次使用如果 DOM 发生变化会怎样? element.all
看来不是个好主意,对吧?
element.all 应该没问题
HTML View
<div id='id1' class="parent">
<ul>
<li class="foo">1a</li>
<li class="baz">1b</li>
</ul>
</div>
<div id='id2' class="parent">
<ul>
<li class="foo">2a</li>
<li class="bar">2b</li>
</ul>
</div>
Code
let foo = element.all(by.css('.parent')).all(by.css('.foo'));
expect(foo.getText()).toEqual(['1a', '2a']);
let baz = element.all(by.css('.parent')).all(by.css('.baz'));
expect(baz.getText()).toEqual(['1b']);
let nonexistent = element.all(by.css('.parent'))
.all(by.css('.NONEXISTENT'));
expect(nonexistent.getText()).toEqual(['']);
// Or using the shortcut $$() notation instead of element.all(by.css()):
let foo = $$('.parent').$$('.foo');
expect(foo.getText()).toEqual(['1a', '2a']);
let baz = $$('.parent').$$('.baz');
expect(baz.getText()).toEqual(['1b']);
let nonexistent = $$('.parent').$$('.NONEXISTENT');
expect(nonexistent.getText()).toEqual(['']);
element.all returns 一个承诺数组。 您可以迭代数组和链来查找输入标签后面的标签。