【问题标题】:How to use Protractor / WebDriverJS to check if an element is displayed without waiting?如何使用 Protractor / WebDriverJS 检查元素是否显示而不等待?
【发布时间】:2017-01-22 04:09:51
【问题描述】:

如何使用量角器检查元素是否可见而不等待? 我来自 Java + WebDriver 背景,是 Protractor 的新手。在 Java 中,我使用了以下解决方案。我正在寻找类似的功能。

更多信息:目前如果我使用 isDisplayed(),WebDriver 将等到元素可见(如果它尚未显示)。我想在不等待的情况下获得可见性状态。

protected void turnOffImplicitWaits() {

    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);

}



protected void turnOnImplicitWaits() {

    driver.manage().timeouts().implicitlyWait(StartupConstants.TIMEOUT, TimeUnit.SECONDS);

}



protected boolean isElementHiddenNow(By by) {

    turnOffImplicitWaits();

    boolean result = ExpectedConditions.invisibilityOfElementLocated(by).apply(driver);

    turnOnImplicitWaits();

    return result;

}

【问题讨论】:

  • 你为什么想要那个 - 你想要涵盖什么用例?是不是有点像:你有一个元素最初是不可见的,但后来变得可见,你想先抓住它不可见..?

标签: protractor webdriverjs


【解决方案1】:

如果您在检查元素的可见性时不希望任何默认等待,请做一件事,即只需对目标元素执行 click() 之类的任何操作,然后添加 then() 函数两个函数作为参数——一个代表成功,另一个代表失败。你按照下面的代码:

 var targetElement=element(locator);
 targetElement.click()
                   .then(function(toBeCalledWhenSuccess) { // fulfillment },    
                         function(reasonForRejection) { // rejection }
                        );

在 Conf.js 中添加以下代码

   jasmineNodeOpts: {
       // Default time to wait in ms before a test fails.
       defaultTimeoutInterval: 0,
    }

【讨论】:

  • 但是如果元素不可见,webdriver 会等待一段时间直到它可见,对吗?我想在不等待的情况下获得可见性状态。你能确认一下吗?
  • 我不这么认为。以及为什么想要那个特定的条件yaar
  • 或者尝试对元素执行任何操作并使用代码 - targetElement.click().then(function(value) { // 实现 }, function(reasonForRejection) { // 拒绝 });
  • 在上述情况下,如果元素不可见或不可点击,它将立即抛出一个错误,该错误将作为参数发送到 then() 中的第二个函数(reasonForRejection){} 方法
  • 你可以为所欲为
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
相关资源
最近更新 更多