In protractor, browser.isElementPresent vs element.isPresent vs element.isElementPresent

后端 未结 3 802
情歌与酒
情歌与酒 2020-11-27 06:06

In protractor, there are, basically, 3 ways to check if an element is present:

var elm = element(by.id(\"myid\"));

browser.isElementPresent(elm);
elm.isPres         


        
3条回答
  •  一整个雨季
    2020-11-27 06:17

    I can't speak to which one is preferred but I was able to find the source code and examine it.

    According to the docs, elm.isPresent() and elm.isElementPresent() are equivalent. Hope that helps.

    Protractor API Docs

    There is a link to View code just to the right of the title.

    browser.isElementPresent(elm);

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

    https://angular.github.io/protractor/#/api?view=ElementFinder.prototype.isPresent

    /**
     * Determine whether the element is present on the page.
     *
     * @view
     * {{person.name}}
     *
     * @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();

    https://angular.github.io/protractor/#/api?view=ElementFinder.prototype.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();
    };
    

提交回复
热议问题