2

我正在使用 selenium c# 自动化 Web 应用程序。

登录后,我必须处理出现在主页中的微调器。

我已经明确等待

wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(LocatorSelect(locator, locatorvalue)));

结果正在通过,脚本等待元素可见。

但是在验证微调器可见性之后,我正在验证同一元素的不可见性。

但是即使我给了 10 秒,该元素仍然等待超过 30-40 秒。然后大约 40 秒后它没有抛出任何错误并继续执行脚本而没有任何异常

public void Spinner_Check(string locator, string locatorvalue)
{
    int count = 1;

    WebDriverWait waits = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
    waits.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(LocatorSelect(locator, locatorvalue)));

    while (count > 0)
        {



        waits.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.InvisibilityOfElementLocated(By.XPath(locatorvalue)));
        IList<IWebElement> spinner_element = driver.FindElements(By.XPath(locatorvalue));
        int size = spinner_element.Count;
            if (size != 1)
            {
                count = 0;
                WriteLine("pass", "Spinner is dismissed for the page");
                break;
            }
        }
}

那么我怎样才能避免那么多等待时间并在微调器从页面中关闭后立即执行脚本。

脚本中的一些观察:

  1. 当我检查 html 时,当元素可见时,我可以看到显示属性的样式是“块”。但是从 UI 中关闭微调器后,我可以看到,xpath 在搜索区域中没有显示任何元素://iframe /parent::body//div[text()='正在加载..']

  2. 出于调试目的,我设置了等待从页面中关闭微调器后可见的元素。然后我可以看到超时异常和 NoSuchElement 异常被触发。

4

1 回答 1

1

你需要考虑几件事情:

  • 目前尚不清楚您是否有单独的测试来验证微调器的可见性,但微调器的不可见性是一个有效的用例。所以只能InvisibilityOfElementLocated()解决你的目的。
  • Spinner_Check方法看起来像一个完整的开销,你可以用一行代码替换它。

解决方案

要验证InvisibilityOfElementLocated例如微调器,您可以使用以下解决方案:

new WebDriverWait(driver, TimeSpan.FromSeconds(10)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.InvisibilityOfElementLocated(LocatorSelect(locator, locatorvalue)));

参考

您可以在以下位置找到一些相关的讨论:

于 2020-05-25T15:34:43.437 回答