javascript - spanish - En transportador, browser.isElementPresent vs element.isPresent vs element.isElementPresent
protractor vs selenium (3)
No puedo decir cuál es el preferido, pero pude encontrar el código fuente y examinarlo.
De acuerdo con los documentos, elm.isPresent()
y elm.isElementPresent()
son equivalentes. Espero que ayude.
Documentos de la API de Protractor
Hay un enlace para View code
justo a la derecha del título.
browser.isElementPresent (olmo);
https://angular.github.io/protractor/#/api?view=webdriver.WebElement.prototype.isElementPresent
/**
* Schedules a command to test if there is at least one descendant of this
* element that matches the given search criteria.
*
* @param {!(webdriver.Locator|webdriver.By.Hash|Function)} locator The
* locator strategy to use when searching for the element.
* @return {!webdriver.promise.Promise.<boolean>} A promise that will be
* resolved with whether an element could be located on the page.
*/
webdriver.WebElement.prototype.isElementPresent = function(locator) {
return this.findElements(locator).then(function(result) {
return !!result.length;
});
};
elm.isPresent ();
/**
* Determine whether the element is present on the page.
*
* @view
* <span>{{person.name}}</span>
*
* @example
* // Element exists.
* expect(element(by.binding(''person.name'')).isPresent()).toBe(true);
*
* // Element not present.
* expect(element(by.binding(''notPresent'')).isPresent()).toBe(false);
*
* @return {ElementFinder} which resolves to whether
* the element is present on the page.
*/
ElementFinder.prototype.isPresent = function() {
return this.parentElementArrayFinder.getWebElements().then(function(arr) {
if (arr.length === 0) {
return false;
}
return arr[0].isEnabled().then(function() {
return true; // is present, whether it is enabled or not
}, function(err) {
if (err.code == webdriver.error.ErrorCode.STALE_ELEMENT_REFERENCE) {
return false;
} else {
throw err;
}
});
}, function(err) {
if (err.code == webdriver.error.ErrorCode.NO_SUCH_ELEMENT) {
return false;
} else {
throw err;
}
});
};
elm.isElementPresent ();
/**
* Same as ElementFinder.isPresent(), except this checks whether the element
* identified by the subLocator is present, rather than the current element
* finder. i.e. `element(by.css(''#abc'')).element(by.css(''#def'')).isPresent()` is
* identical to `element(by.css(''#abc'')).isElementPresent(by.css(''#def''))`.
*
* @see ElementFinder.isPresent
*
* @param {webdriver.Locator} subLocator Locator for element to look for.
* @return {ElementFinder} which resolves to whether
* the subelement is present on the page.
*/
ElementFinder.prototype.isElementPresent = function(subLocator) {
if (!subLocator) {
throw new Error(''SubLocator is not supplied as a parameter to '' +
''`isElementPresent(subLocator)`. You are probably looking for the '' +
''function `isPresent()`.'');
}
return this.element(subLocator).isPresent();
};
En transportador, hay, básicamente, 3 formas de verificar si un elemento está presente:
var elm = element(by.id("myid"));
browser.isElementPresent(elm);
elm.isPresent();
elm.isElementPresent();
¿Son estas opciones equivalentes e intercambiables, y cuál debería preferirse en general?
Puede verificar si el elemento está presente o no utilizando la función isPresent.
Entonces, tu código sería algo así como:
var myElement = element(by.css(''.elementClass''));
expect(myElement.isPresent()).toBeFalsy();
Here están los documentos del transportador para la función isPresent.
Todos funcionan de manera similar con diferencias sutiles. Aquí hay algunas diferencias que encontré
- Es una extensión de
ElementFinder
y espera a que Angular se instale en la página antes de ejecutar cualquier acción. - Funciona cuando
elm
es unelement(locator)
oElementFinder
y noElementArrayFinder
. Si se devuelven múltiples elementos usando ellocator
especificado, entonces el primer elemento se verifica si estáisEnabled()
en el DOM. No toma ningún parámetro como entrada. - Funciona mejor con páginas angulares y elementos angulares.
- Primera preferencia para usar cada vez que haya una necesidad de encontrar si un elemento está presente.
elm.isElementPresent(subLoc)
- (cuando hay un sub localizador en elm
)
- Es una extensión de
ElementFinder
y espera a que Angular se instale en la página antes de ejecutar cualquier acción. - Usado para verificar la presencia de elementos que son sub elementos de un padre. Toma un
sub locator
alelm
padre como parámetro. (única diferencia entre esto y elelm.isPresent()
) - Funciona mejor con páginas angulares y elementos angulares.
- La primera preferencia es usar cada vez que sea necesario verificar si un sub elemento de un padre está presente.
browser.isElementPresent(element || Locator)
-
- Es una implementación de
webdriver
y, por lo tanto, no espera a que angular se establezca. - Toma un
locator
o unelement
como parámetro y usa el primer resultado si se ubican múltiples elementos usando el mismo localizador. - Se usa mejor con páginas no angulares.
- Primera preferencia para usar cuando se prueba en páginas no angulares.
Todo lo anterior comprueba la presencia de un elemento en DOM y devuelve un resultado boolean
. Aunque las características angulares y no angulares no afectan el uso de estos métodos, existe una ventaja adicional cuando el método espera que se ajuste angular de forma predeterminada y ayuda a evitar errores en caso de que no se encuentre un elemento similar angular o excepciones de referencia de elementos de estado. etc ...