Busur derajat - Inti APIS (CONTD…)
Dalam bab ini, mari kita pelajari beberapa API inti Protractor.
Elemen API
Elemen adalah salah satu fungsi global yang diekspos oleh busur derajat. Fungsi ini mengambil locater dan mengembalikan yang berikut -
- ElementFinder, yang menemukan satu elemen berdasarkan pelacak.
- ElementArrayFinder, yang menemukan larik elemen berdasarkan locator.
Kedua metode rantai dukungan di atas seperti yang dibahas di bawah ini.
Fungsi rangkaian ElementArrayFinder dan deskripsinya
Berikut adalah fungsi dari ElementArrayFinder -
element.all(locator).clone
Seperti namanya, fungsi ini akan membuat salinan dangkal dari larik elemen yaitu ElementArrayFinder.
element.all(locator).all(locator)
Fungsi ini pada dasarnya mengembalikan ElementArrayFinder baru yang bisa kosong atau berisi elemen turunan. Ini dapat digunakan untuk memilih beberapa elemen sebagai array sebagai berikut
Example
element.all(locator).all(locator)
elementArr.all(by.css(‘.childselector’));
// it will return another ElementFindArray as child element based on child locator.
element.all(locator).filter(filterFn)
Seperti namanya, setelah menerapkan fungsi filter ke setiap elemen dalam ElementArrayFinder, ia mengembalikan ElementArrayFinder baru dengan semua elemen yang meneruskan fungsi filter. Ini pada dasarnya memiliki dua argumen, pertama adalah ElementFinder dan kedua adalah indeks. Ini juga dapat digunakan di objek halaman.
Example
View
<ul class = "items">
<li class = "one">First</li>
<li class = "two">Second</li>
<li class = "three">Third</li>
</ul>
Code
element.all(by.css('.items li')).filter(function(elem, index) {
return elem.getText().then(function(text) {
return text === 'Third';
});
}).first().click();
element.all(locator).get(index)
Dengan bantuan ini, kita bisa mendapatkan elemen dalam ElementArrayFinder menurut indeks. Perhatikan bahwa indeks dimulai dari 0 dan indeks negatif dibungkus.
Example
View
<ul class = "items">
<li>First</li>
<li>Second</li>
<li>Third</li>
</ul>
Code
let list = element.all(by.css('.items li'));
expect(list.get(0).getText()).toBe('First');
expect(list.get(1).getText()).toBe('Second');
element.all(locator).first()
Seperti namanya, ini akan mendapatkan elemen pertama untuk ElementArrayFinder. Itu tidak akan mengambil elemen yang mendasarinya.
Example
View
<ul class = "items">
<li>First</li>
<li>Second</li>
<li>Third</li>
</ul>
Code
let first = element.all(by.css('.items li')).first();
expect(first.getText()).toBe('First');
element.all(locator).last()
Seperti namanya, ini akan mendapatkan elemen terakhir untuk ElementArrayFinder. Itu tidak akan mengambil elemen yang mendasarinya.
Example
View
<ul class = "items">
<li>First</li>
<li>Second</li>
<li>Third</li>
</ul>
Code
let first = element.all(by.css('.items li')).last();
expect(last.getText()).toBe('Third');
element.all(locator).all(selector)
Ini digunakan untuk menemukan larik elemen dalam induk ketika panggilan ke $$ mungkin dirantai.
Example
View
<div class = "parent">
<ul>
<li class = "one">First</li>
<li class = "two">Second</li>
<li class = "three">Third</li>
</ul>
</div>
Code
let items = element(by.css('.parent')).$$('li');
element.all(locator).count()
Seperti namanya, ini akan menghitung jumlah elemen yang diwakili oleh ElementArrayFinder. Itu tidak akan mengambil elemen yang mendasarinya.
Example
View
<ul class = "items">
<li>First</li>
<li>Second</li>
<li>Third</li>
</ul>
Code
let list = element.all(by.css('.items li'));
expect(list.count()).toBe(3);
element.all(locator).isPresent()
Ini akan mencocokkan elemen dengan finder. Itu bisa mengembalikan benar atau salah. Benar, jika ada elemen yang cocok dengan finder dan False sebaliknya.
Example
expect($('.item').isPresent()).toBeTruthy();
element.all(locator).locator
Seperti namanya, ini akan mengembalikan pencari lokasi yang paling relevan.
Example
$('#ID1').locator();
// returns by.css('#ID1')
$('#ID1').$('#ID2').locator();
// returns by.css('#ID2')
$$('#ID1').filter(filterFn).get(0).click().locator();
// returns by.css('#ID1')
element.all(locator).then(thenFunction)
Ini akan mengambil elemen yang diwakili oleh ElementArrayFinder.
Example
View
<ul class = "items">
<li>First</li>
<li>Second</li>
<li>Third</li>
</ul>
Code
element.all(by.css('.items li')).then(function(arr) {
expect(arr.length).toEqual(3);
});
element.all(locator).each(eachFunction)
Seperti namanya, ini akan memanggil fungsi input pada setiap ElementFinder yang diwakili oleh ElementArrayFinder.
Example
View
<ul class = "items">
<li>First</li>
<li>Second</li>
<li>Third</li>
</ul>
Code
element.all(by.css('.items li')).each(function(element, index) {
// It will print First 0, Second 1 and Third 2.
element.getText().then(function (text) {
console.log(index, text);
});
});
element.all(locator).map(mapFunction)
Seperti namanya, ini akan menerapkan fungsi peta pada setiap elemen dalam ElementArrayFinder. Ini memiliki dua argumen. Pertama adalah ElementFinder dan kedua adalah indeks.
Example
View
<ul class = "items">
<li>First</li>
<li>Second</li>
<li>Third</li>
</ul>
Code
let items = element.all(by.css('.items li')).map(function(elm, index) {
return {
index: index,
text: elm.getText(),
class: elm.getAttribute('class')
};
});
expect(items).toEqual([
{index: 0, text: 'First', class: 'one'},
{index: 1, text: 'Second', class: 'two'},
{index: 2, text: 'Third', class: 'three'}
]);
element.all(locator).reduce(reduceFn)
Seperti namanya, ini akan menerapkan fungsi pengurangan terhadap akumulator dan setiap elemen yang ditemukan menggunakan pencari lokasi. Fungsi ini akan mereduksi setiap elemen menjadi satu nilai.
Example
View
<ul class = "items">
<li>First</li>
<li>Second</li>
<li>Third</li>
</ul>
Code
let value = element.all(by.css('.items li')).reduce(function(acc, elem) {
return elem.getText().then(function(text) {
return acc + text + ' ';
});
}, '');
expect(value).toEqual('First Second Third ');
element.all(locator).evaluate
Seperti namanya, itu akan mengevaluasi input apakah itu dalam lingkup elemen yang mendasari saat ini atau tidak.
Example
View
<span class = "foo">{{letiableInScope}}</span>
Code
let value =
element.all(by.css('.foo')).evaluate('letiableInScope');
element.all(locator).allowAnimations
Seperti namanya, ini akan menentukan apakah animasi diperbolehkan pada elemen yang mendasari saat ini atau tidak.
Example
element(by.css('body')).allowAnimations(false);
Fungsi rantai dari ElementFinder dan deskripsinya
Fungsi rantai dari ElementFinder dan deskripsinya -
element(locator).clone
Seperti namanya, fungsi ini akan membuat salinan ElementFinder yang dangkal.
element(locator).getWebElement()
Ini akan mengembalikan WebElement yang diwakili oleh ElementFinder ini dan kesalahan WebDriver akan muncul jika elemen tidak ada.
Example
View
<div class="parent">
some text
</div>
Code
// All the four following expressions are equivalent.
$('.parent').getWebElement();
element(by.css('.parent')).getWebElement();
browser.driver.findElement(by.css('.parent'));
browser.findElement(by.css('.parent'));
element(locator).all(locator)
Ini akan menemukan array elemen dalam induk.
Example
View
<div class = "parent">
<ul>
<li class = "one">First</li>
<li class = "two">Second</li>
<li class = "three">Third</li>
</ul>
</div>
Code
let items = element(by.css('.parent')).all(by.tagName('li'));
element(locator).element(locator)
Ini akan menemukan elemen dalam induk.
Example
View
<div class = "parent">
<div class = "child">
Child text
<div>{{person.phone}}</div>
</div>
</div>
Code
// Calls Chain 2 element.
let child = element(by.css('.parent')).
element(by.css('.child'));
expect(child.getText()).toBe('Child text\n981-000-568');
// Calls Chain 3 element.
let triple = element(by.css('.parent')).
element(by.css('.child')).
element(by.binding('person.phone'));
expect(triple.getText()).toBe('981-000-568');
element(locator).all(selector)
Ini akan menemukan array elemen dalam induk saat panggilan ke $$ mungkin dirantai.
Example
View
<div class = "parent">
<ul>
<li class = "one">First</li>
<li class = "two">Second</li>
<li class = "three">Third</li>
</ul>
</div>
Code
let items = element(by.css('.parent')).$$('li'));
element(locator).$(locator)
Ini akan menemukan elemen dalam induk ketika panggilan ke $ mungkin dirantai.
Example
View
<div class = "parent">
<div class = "child">
Child text
<div>{{person.phone}}</div>
</div>
</div>
Code
// Calls Chain 2 element.
let child = element(by.css('.parent')).
$('.child'));
expect(child.getText()).toBe('Child text\n981-000-568');
// Calls Chain 3 element.
let triple = element(by.css('.parent')).
$('.child')).
element(by.binding('person.phone'));
expect(triple.getText()).toBe('981-000-568');
element(locator).isPresent()
Ini akan menentukan apakah elemen disajikan di halaman atau tidak.
Example
View
<span>{{person.name}}</span>
Code
expect(element(by.binding('person.name')).isPresent()).toBe(true);
// will check for the existence of element
expect(element(by.binding('notPresent')).isPresent()).toBe(false);
// will check for the non-existence of element
element(locator).isElementPresent()
Ini sama dengan elemen (locator) .isPresent (). Satu-satunya perbedaan adalah ia akan memeriksa apakah elemen yang diidentifikasi oleh sublocator ada daripada pencari elemen saat ini.
element.all(locator).evaluate
Seperti namanya, itu akan mengevaluasi input apakah itu dalam lingkup elemen yang mendasari saat ini atau tidak.
Example
View
<span id = "foo">{{letiableInScope}}</span>
Code
let value = element(by.id('.foo')).evaluate('letiableInScope');
element(locator).allowAnimations
Seperti namanya, ini akan menentukan apakah animasi diperbolehkan pada elemen yang mendasari saat ini atau tidak.
Example
element(by.css('body')).allowAnimations(false);
element(locator).equals
Seperti namanya, ini akan membandingkan elemen kesetaraan.
Locators (oleh) API
Ini pada dasarnya adalah kumpulan strategi pelacak elemen yang menyediakan cara untuk menemukan elemen dalam aplikasi Angular dengan mengikat, model, dll.
Functions and their descriptions
Fungsi ProtractorLocators API adalah sebagai berikut -
by.addLocator(locatorName,fuctionOrScript)
Ini akan menambahkan locator ke instance ProtrcatorBy ini yang selanjutnya dapat digunakan dengan elemen (by.locatorName (args)).
Example
View
<button ng-click = "doAddition()">Go!</button>
Code
// Adding the custom locator.
by.addLocator('buttonTextSimple', function(buttonText, opt_parentElement, opt_rootSelector) {
var using = opt_parentElement || document,
buttons = using.querySelectorAll('button');
return Array.prototype.filter.call(buttons, function(button) {
return button.textContent === buttonText;
});
});
element(by.buttonTextSimple('Go!')).click();// Using the custom locator.
by.binding
Seperti namanya, ia akan menemukan elemen dengan pengikatan teks. Pencocokan parsial akan dilakukan sehingga setiap elemen yang terikat ke variabel yang berisi string input akan dikembalikan.
Example
View
<span>{{person.name}}</span>
<span ng-bind = "person.email"></span>
Code
var span1 = element(by.binding('person.name'));
expect(span1.getText()).toBe('Foo');
var span2 = element(by.binding('person.email'));
expect(span2.getText()).toBe('[email protected]');
by.exactbinding
Seperti namanya, ia akan menemukan elemen dengan pengikatan yang tepat.
Example
View
<spangt;{{ person.name }}</spangt;
<span ng-bind = "person-email"gt;</spangt;
<spangt;{{person_phone|uppercase}}</span>
Code
expect(element(by.exactBinding('person.name')).isPresent()).toBe(true);
expect(element(by.exactBinding('person-email')).isPresent()).toBe(true);
expect(element(by.exactBinding('person')).isPresent()).toBe(false);
expect(element(by.exactBinding('person_phone')).isPresent()).toBe(true);
expect(element(by.exactBinding('person_phone|uppercase')).isPresent()).toBe(true);
expect(element(by.exactBinding('phone')).isPresent()).toBe(false);
by.model(modelName)
Seperti namanya, ia akan menemukan elemen dengan ekspresi model-ng.
Example
View
<input type = "text" ng-model = "person.name">
Code
var input = element(by.model('person.name'));
input.sendKeys('123');
expect(input.getAttribute('value')).toBe('Foo123');
by.buttonText
Seperti namanya, ia akan menemukan tombol demi teks.
Example
View
<button>Save</button>
Code
element(by.buttonText('Save'));
by.partialButtonText
Seperti namanya, ia akan menemukan tombol dengan teks parsial.
Example
View
<button>Save my file</button>
Code
element(by.partialButtonText('Save'));
by.repeater
Seperti namanya, ia akan menemukan elemen di dalam ng-repeat.
Example
View
<div ng-repeat = "cat in pets">
<span>{{cat.name}}</span>
<span>{{cat.age}}</span>
<</div>
<div class = "book-img" ng-repeat-start="book in library">
<span>{{$index}}</span>
</div>
<div class = "book-info" ng-repeat-end>
<h4>{{book.name}}</h4>
<p>{{book.blurb}}</p>
</div>
Code
var secondCat = element(by.repeater('cat in
pets').row(1)); // It will return the DIV for the second cat.
var firstCatName = element(by.repeater('cat in pets').
row(0).column('cat.name')); // It will return the SPAN for the first cat's name.
by.exactRepeater
Seperti namanya, ia akan menemukan elemen dengan repeater yang tepat.
Example
View
<li ng-repeat = "person in peopleWithRedHair"></li>
<li ng-repeat = "car in cars | orderBy:year"></li>
Code
expect(element(by.exactRepeater('person in
peopleWithRedHair')).isPresent())
.toBe(true);
expect(element(by.exactRepeater('person in
people')).isPresent()).toBe(false);
expect(element(by.exactRepeater('car in cars')).isPresent()).toBe(true);
by.cssContainingText
Seperti namanya, itu akan menemukan elemen, berisi string yang tepat, oleh CSS
Example
View
<ul>
<li class = "pet">Dog</li>
<li class = "pet">Cat</li>
</ul>
Code
var dog = element(by.cssContainingText('.pet', 'Dog'));
// It will return the li for the dog, but not for the cat.
by.options(optionsDescriptor)
Seperti namanya, ia akan menemukan elemen dengan ekspresi ng-options.
Example
View
<select ng-model = "color" ng-options = "c for c in colors">
<option value = "0" selected = "selected">red</option>
<option value = "1">green</option>
</select>
Code
var allOptions = element.all(by.options('c for c in colors'));
expect(allOptions.count()).toEqual(2);
var firstOption = allOptions.first();
expect(firstOption.getText()).toEqual('red');
by.deepCSS(selector)
Seperti namanya, ia akan menemukan elemen dengan pemilih CSS di dalam shadow DOM.
Example
View
<div>
<span id = "outerspan">
<"shadow tree">
<span id = "span1"></span>
<"shadow tree">
<span id = "span2"></span>
</>
</>
</div>
Code
var spans = element.all(by.deepCss('span'));
expect(spans.count()).toEqual(3);