首頁>Program>source

在量角器中,基本上有3種方法可以檢查元素是否存在:

var elm = element(by.id("myid"));
browser.isElementPresent(elm);
elm.isPresent();
elm.isElementPresent();

這些選項是否等效且可互換,並且通常應首選哪个?

最新回復
  • 5月前
    1 #

    所有功能均以相似的方式存在细微的差異.這是我發現的一些差異-

    elm.isPresent() -

    ElementFinder的擴充套件 因此,在執行任何操作之前,請等待Angular在頁面上稳定下来.

    elm時有效 是个 element(locator)ElementFinder 而不是 ElementArrayFinder .如果使用 locator返迴了多个元素 指定,然後檢查第一个元素是否為 isEnabled() 在DOM中.不接受任何引數作為輸入。

    与Angular頁面和Angular元素一起使用效果最佳。

    需要查詢元素是否存在時使用的第一个首選項。

    elm.isElementPresent(subLoc) -((如果有 elm的子定位器, )

    ElementFinder的擴充套件 因此,在執行任何操作之前,等待Angular在頁面上停留。

    用於檢查是否存在作為父級子元素的元素.它需要一个 sub locator 给父母 elm 作為引數. (仅此与 elm.isPresent()之間的區別 )

    与Angular頁面和Angular元素一起使用效果最佳。

    需要檢查父級的子元素時使用的第一優先順序。

    browser.isElementPresent(element || Locator) -

    webdriver的實現 因此,無需等待角度稳定下来。

    采取一个 locatorelement 作為引數,如果使用同一定位符定位多个元素,則使用第一个結果。

    最適合用於非角度頁面。

    在非角度頁面上进行測試時使用的首選。

    以上所有檢查DOM中是否存在元素,並返迴 boolean 結果.虽然角度和非角度特征不会影响這些方法的使用,但是当该方法預設等待角度建立時,還有一个額外的優势,即在找不到像角度的元素或狀態元素引用異常的情况下,有助於避免錯誤, 等等...

  • 5月前
    2 #

    我無法說出首選哪一个,但是我能够找到源代碼並进行檢查。

    根据文件 elm.isPresent()elm.isElementPresent() 是等效的.希望有帮助。

    量角器API文件

    有一个到 View code的鏈接 在標题的右邊。

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

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

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

  • 5月前
    3 #

    您可以使用isPresent函式檢查元素是否存在。

    因此,您的代碼將類似於:

    var myElement = element(by.css('.elementClass'));
    expect(myElement.isPresent()).toBeFalsy();
    

    這是isPresent函式的量角器文件。

  • python:標識符中的字元無效
  • php:致命錯誤:呼叫未定義的函式mb_detect_encoding()