【问题标题】:Try block do not handle scenario when element not found未找到元素时尝试块不处理场景
【发布时间】:2017-11-16 23:45:01
【问题描述】:

我使用下面的代码,发现 TRY 块不适用于元素不存在的情况:

try
{      
    var actual = new WebDriverWait(m_WebDriver, TimeSpan
        .FromSeconds(5))
        .Until(ExpectedConditions
        .ElementIsVisible(By.XPath(XpathUnderTest)))
        .Displayed;

    return actual;
}
catch (Exception ex)
{      
   return false;
}

我有一个用例,其中 Webelement 的存在取决于其他条件,因此它在网页上始终不存在或不可见。如果元素存在,则它正在工作,如果元素不存在,则 Try catch 无法使用您上面的代码处理场景。

我也试过:bool isPresent = Driver.Findelements.(xpath).Count() > 0; // 列表 但如果元素不存在,它就不能正常工作

【问题讨论】:

  • 你的意思是“无法处理这种情况”?你有错误吗?
  • 是的,我收到失败消息:openqa.selenium.webdriverexception 对远程 WebDriver 的 HTTP 请求在 60 秒后超时。不知何故,我得到了 syas 代码能够进入 Catch 块的跟踪日志,但是我又不确定它为什么卡在那里。为什么司机无法继续前进?
  • 请分享您调用此函数的代码。既然您说 catch 块已被处理,那么问题可能是在它返回 false 之后发生的。被骗回来了怎么办?

标签: c# selenium selenium-webdriver try-catch webdriverwait


【解决方案1】:

根据您的代码块,正确的行为是 WebDriverWaitElementIsVisible 是正确的。

根据documentationExpectedConditionsElementIsVisible 将在 IWebElement 找到并可见后返回.如果 ExpectedConditions 失败,则返回 Boolean 值。

就像在您定义的 try 块中一样:

var actual;

并试图:

return actual;

因此,无论从 ExpectedConditionsElementIsVisible 返回如何,您的 try 块都会返回 False Positive。 p>

解决办法:

WebDriverWaitExpectedConditions 必须在任何 Try-Catch 块之外实现。可以根据返回类型决定后续步骤。

【讨论】:

  • 是的,我在外部定义了“WebDriverWait”,并且我一直在验证实际测试逻辑之外的许多内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 2019-07-19
  • 2020-04-14
  • 2019-08-26
相关资源
最近更新 更多