English 中文(简体)
Protractor - Core APIs(Contd..)
  • 时间:2024-03-22 21:52:45

Protractor - Core APIS(CONTD…)


Previous Page Next Page  

在本章中,让我们学习一些更核心的征求答者意向书。

Elements API

要素是领先者所暴露的全球功能之一。 这一职能包括一名定位员和以下人员:

    ElementFinder, that finds a single element based on the locator.

    ElementArrayFinder, that finds an array of elements based on the locator.

上文讨论的上述支助链方法。

Chaining functions of ElementArrayFinder and their descriptions

如下:

element.all(定位器)clone

如名称所示,这一职能将产生一系列要素即: Element ArrayFinder。

element.all(定位器)all(定位器)

这项职能基本上回报了一个新的Element ArrayFinder,该笔手术可能空洞或含有儿童内容。 它可以用来选择多个要素,作为以下阵列:

element.all(locator).all(locator)
elementArr.all(by.css(‘.childselector’));
// it will return another ElementFindArray as child element based on child locator.

element.all(定位器)filter(filterFn)

如该名称所示,在对Element ArrayFinder的每个要素适用过滤功能后,该机将一个新的ArrayFinder连同所有通过过滤功能的内容交还。 它基本上有两个论点:第一是ElementFinder,第二是指数。 也可在页面物体中使用。

<ul class = "items">
   <p class = "one">First</p>
   <p class = "two">Second</p>
   <p class = "three">Third</p>
</ul>

element.all(by.css( .items p )).filter(function(elem, index) {
   return elem.getText().then(function(text) {
      return text ===  Third ;
   });
}).first().cpck();

element.all(定位器)get(index)

在帮助下,我们能够通过指数在ElementArrayFinder中找到一个要素。 请注意,指数从0开始,负指数则总结。

<ul class = "items">
   <p>First</p>
   <p>Second</p>
   <p>Third</p>
</ul>

let pst = element.all(by.css( .items p ));
expect(pst.get(0).getText()).toBe( First );
expect(pst.get(1).getText()).toBe( Second );

element.all(定位器)

如名称所示,这将产生第一点要素,用于Element ArrayFinder。 它不会收回基本要素。

<ul class = "items">
   <p>First</p>
   <p>Second</p>
   <p>Third</p>
</ul>

let first = element.all(by.css( .items p )).first();
expect(first.getText()).toBe( First );

element.all(定位器)last()。

如名称所示,这将得到ElementArrayFinder的最后一项内容。 它不会收回基本要素。

<ul class = "items">
   <p>First</p>
   <p>Second</p>
   <p>Third</p>
</ul>

let first = element.all(by.css( .items p )).last();
expect(last.getText()).toBe( Third );

element.all(定位器)

这笔钱用于在父母内部寻找一系列要素,如果可以连结到美元。

<span class = "parent">
   <ul>
      <p class = "one">First</p>
      <p class = "two">Second</p>
      <p class = "three">Third</p>
   </ul>
</span>

let items = element(by.css( .parent )).$$( p );

element.all(定位器)count()。

如名称所示,这将计算由Element ArrayFinder代理的成分数目。 它不会收回基本要素。

<ul class = "items">
   <p>First</p>
   <p>Second</p>
   <p>Third</p>
</ul>

let pst = element.all(by.css( .items p ));
expect(pst.count()).toBe(3);

element.all(定位器)。

它将与寻找者匹配。 它能够恢复真实或虚假。 确实,如果存在任何与寻找者和其他人相匹配的因素。

expect($( .item ).isPresent()).toBeTruthy();

element.all(定位器)。

如名称所示,它将归还最相关的定位器。

$( #ID1 ).locator();
// returns by.css( #ID1 )
$( #ID1 ).$( #ID2 ).locator();
// returns by.css( #ID2 )
$$( #ID1 ).filter(filterFn).get(0).cpck().locator();
// returns by.css( #ID1 )

element.all(定位)then(thenFunction)

它将收回由ElementArrayFinder代表的部件。

<ul class = "items">
   <p>First</p>
   <p>Second</p>
   <p>Third</p>
</ul>

element.all(by.css( .items p )).then(function(arr) {
   expect(arr.length).toEqual(3);
});

element.all(定位器)each(每个功能)

如名称所示,它将把投入职能指由ElementArrayFinder代表的每个重要协调人。

<ul class = "items">
   <p>First</p>
   <p>Second</p>
   <p>Third</p>
</ul>

element.all(by.css( .items p )).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(定位器)map(地图功能)

如名称所示,它将对ElementArrayFinder内部的每一部分适用地图功能。 它有两个论点。 第一是执行框架,第二是指数。

<ul class = "items">
   <p>First</p>
   <p>Second</p>
   <p>Third</p>
</ul>

let items = element.all(by.css( .items p )).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(定位),reduce(reduceFn)

如名称所示,它将对使用定位器的蓄积器和每个元素适用减少功能。 这项职能将把每个要素减为单一价值。

<ul class = "items">
   <p>First</p>
   <p>Second</p>
   <p>Third</p>
</ul>

let value = element.all(by.css( .items p )).reduce(function(acc, elem) {
   return elem.getText().then(function(text) {
      return acc + text +    ;
   });
},   );

expect(value).toEqual( First Second Third  );

element.all(定位器)。

如名称所示,它将评估投入是否属于现有基本要素的范围。

<span class = "foo">{{letiableInScope}}</span>

let value = 
element.all(by.css( .foo )).evaluate( letiableInScope );

element.all(定位器)。

如名称所示,它将确定是否允许对当前基本要素进行估算。

element(by.css( body )).allowAnimations(false);

Chaining functions of ElementFinder and their descriptions

资产组合的功能及其描述

(位置) 包括

如名称所示,这项职能将产生一份标本的复印件。

element(定位器)。

如果该要素不存在,则将归还由该模拟器代表的网络要素,并投掷网络驱动器错误。

<span class="parent">
   some text
</span>

// 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 ));

(地点)

它将在父母内部找到一系列要素。

<span class = "parent">
   <ul>
      <p class = "one">First</p>
      <p class = "two">Second</p>
      <p class = "three">Third</p>
   </ul>
</span>

let items = element(by.css( .parent )).all(by.tagName( p ));

(地点)element(定位)

它将在父母中找到要素。

<span class = "parent">
   <span class = "child">
      Child text
      <span>{{person.phone}}</span>
   </span>
</span>

// Calls Chain 2 element.
let child = element(by.css( .parent )).
   element(by.css( .child ));
expect(child.getText()).toBe( Child text
981-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 );

(定位)all(探测器)

在请购到美元时,它将在父母内部找到一系列要素。

<span class = "parent">
   <ul>
      <p class = "one">First</p>
      <p class = "two">Second</p>
      <p class = "three">Third</p>
   </ul>
</span>

let items = element(by.css( .parent )).$$( p ));

(地点)

在请购美元时,它将在父母内部找到一些要素。

<span class = "parent">
   <span class = "child">
      Child text
      <span>{{person.phone}}</span>
  </span>
</span>

// Calls Chain 2 element.
let child = element(by.css( .parent )).
   $( .child ));
expect(child.getText()).toBe( Child text
981-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 );

(地点)

它将确定该要素是否在网页上列报。

<span>{{person.name}}</span>

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.all(定位器)。

如名称所示,它将评估投入是否涉及目前基本要素的范围。

<span id = "foo">{{letiableInScope}}</span>

let value = element(by.id( .foo )).evaluate( letiableInScope );

(地点)allowAnimations

如名称所示,它将确定是否允许对当前基本要素进行估算。

element(by.css( body )).allowAnimations(false);

(地点) 等值

如名称所示,它将比较平等的要素。

Locators(by) API

它基本上是一套内容定位战略,通过具有约束力的模式等方法在安热应用中找到要素。

职能及其说明

宣传员APIC的职能如下:

by.addLocator(siteorName,fuctionOrcast)

它将在ProtrcatorBy一案中增加一个定位器,还可以使用元素(如定位器Name(args)。

<button ng-cpck = "doAddition()">Go!</button>

// 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! )).cpck();// Using the custom locator.

by. binding

如名称所示,它将通过具有约束力的案文找到一个要素。 将进行部分匹配,以便退还与包含输入指示数的变量有关的任何内容。

<span>{{person.name}}</span>
<span ng-bind = "person.email"></span>

var span1 = element(by.binding( person.name ));
expect(span1.getText()).toBe( Foo );

var span2 = element(by.binding( person.email ));
expect(span2.getText()).toBe( foo@bar.com );

by.exact binding

如名称所示,它将通过确切的约束力找到一个要素。

<spangt;{{ person.name }}</spangt;
<span ng-bind = "person-email"gt;</spangt;
<spangt;{{person_phone|uppercase}}</span>

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)

如名称所示,它将以纳克-模范表达方式找到一个要素。

<input type = "text" ng-model = "person.name">

var input = element(by.model( person.name ));
input.sendKeys( 123 );
expect(input.getAttribute( value )).toBe( Foo123 );

by.buttonText

如名称所示,它将按案文找到一个纽州。

<button>Save</button>

element(by.buttonText( Save ));

by.partialButtonText

如名称所示,它将通过部分案文找到一个纽州。

<button>Save my file</button>

element(by.partialButtonText( Save ));

by.repeater>

如名称所示,它将在ng中找到一个元素。

<span ng-repeat = "cat in pets">
   <span>{{cat.name}}</span>
   <span>{{cat.age}}</span>
<</span>
<span class = "book-img" ng-repeat-start="book in pbrary">
   <span>{{$index}}</span>
</span>
<span class = "book-info" ng-repeat-end>
   <h4>{{book.name}}</h4>
   <p>{{book.blurb}}</p>
</span>

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

如名称所示,它将找到一个准确重复因素。

<p ng-repeat = "person in peopleWithRedHair"></p>
<p ng-repeat = "car in cars | orderBy:year"></p>

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

如名称所示,安保部将发现含有准确载体的内容。

<ul>
<p class = "pet">Dog</p>
<p class = "pet">Cat</p>
</ul>

var dog = element(by.cssContainingText( .pet ,  Dog )); 
// It will return the p for the dog, but not for the cat.

by.options (optionsDescriptor)

如名称所示,它将通过权势表达方式找到一个要素。

<select ng-model = "color" ng-options = "c for c in colors">
   <option value = "0" selected = "selected">red</option>
   <option value = "1">green</option>
</select>

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)

正如名称所示,它将在投影器中找到一个要素。

<span>
   <span id = "outerspan">
      <"shadow tree">
         <span id = "span1"></span>
      <"shadow tree">
      <span id = "span2"></span>
   </>
   </>
</span>

var spans = element.all(by.deepCss( span ));
expect(spans.count()).toEqual(3);
Advertisements