tutorial spanish example espaƱol javascript selenium selenium-webdriver protractor end-to-end

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

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

elm.isElementPresent(subLoc)

/** * 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é

elm.isPresent() -

  1. Es una extensión de ElementFinder y espera a que Angular se instale en la página antes de ejecutar cualquier acción.
  2. Funciona cuando elm es un element(locator) o ElementFinder y no ElementArrayFinder . Si se devuelven múltiples elementos usando el locator especificado, entonces el primer elemento se verifica si está isEnabled() en el DOM. No toma ningún parámetro como entrada.
  3. Funciona mejor con páginas angulares y elementos angulares.
  4. 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 )

  1. Es una extensión de ElementFinder y espera a que Angular se instale en la página antes de ejecutar cualquier acción.
  2. Usado para verificar la presencia de elementos que son sub elementos de un padre. Toma un sub locator al elm padre como parámetro. (única diferencia entre esto y el elm.isPresent() )
  3. Funciona mejor con páginas angulares y elementos angulares.
  4. La primera preferencia es usar cada vez que sea necesario verificar si un sub elemento de un padre está presente.

browser.isElementPresent(element || Locator) -

  1. Es una implementación de webdriver y, por lo tanto, no espera a que angular se establezca.
  2. Toma un locator o un element como parámetro y usa el primer resultado si se ubican múltiples elementos usando el mismo localizador.
  3. Se usa mejor con páginas no angulares.
  4. 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 ...