在 Protractor 中,基本上有3种方法可以检查元素是否存在:

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

browser.isElementPresent(elm);
elm.isPresent();
elm.isElementPresent();

这些选项是否等效且可互换,通常应首选哪个?

最佳答案

所有功能均以相似的方式存在细微的差异。这是我发现的一些差异-

elm.isPresent() -

  • ElementFinder的扩展,因此waits for Angular在执行任何操作之前先沉降在页面上。
  • elmelement(locator)ElementFinder而不是ElementArrayFinder时,它可以工作。如果使用指定的locator返回了多个元素,则检查第一个元素是否在DOM中为isEnabled()。不接受任何参数作为输入。
  • 最适合Angular页面和Angular元素。
  • 需要查找元素是否存在时使用的第一个首选项。

  • elm.isElementPresent(subLoc) -(当存在elm的子定位符时)
  • ElementFinder的扩展,因此在执行任何操作之前等待Angular在页面上稳定下来。
  • 用于检查作为父级的子元素的元素的存在。它需要将sub locator作为父elm的参数。 (仅此和elm.isPresent()之间的区别)
  • 最适合Angular页面和Angular元素。
  • 需要检查父级的子元素时使用的第一个首选项。

  • browser.isElementPresent(element || Locator) -
  • webdriver的实现,因此不必等待角度稳定下来。
  • locatorelement作为参数,如果使用同一定位器定位多个元素,则使用第一个结果。
  • 最佳用于非角度页面。
  • 在非角度页面上测试时使用的第一个首选项。

  • 上面所有这些检查DOM中元素的存在并返回boolean结果。虽然角度和非角度特征不会影响这些方法的使用,但是当该方法默认等待角度建立时,还有一个额外的优势,即在找不到像角度的元素或状态元素引用异常的情况下,有助于避免错误,等等...

    关于javascript - 在 Protractor 中,browser.isElementPresent与element.isPresent与element.isElementPresent,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33019429/

    10-09 13:28