当找不到元素时,Try 块不处理场景

Try block do not handle scenario when element not found

我使用了下面的代码,发现 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 的存在取决于其他条件,因此它在网页上不会一直存在或不可见。如果 element 存在则它正在工作,如果 element 不存在则 Try catch 无法使用您上面的代码处理该场景。

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

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

根据 documentationExpectedConditionsElementIsVisible 将 return IWebElement 一旦找到并可见。如果 ExpectedConditions 失败,Boolean 值被 return 回退。

正如您在 try 块中定义的那样:

var actual;

并尝试:

return actual;

因此,无论 ExpectedConditions 的 return 与 ElementIsVisible 你的 try块returnsFalse Positive.

解决方案:

WebDriverWaitExpectedConditions 必须在任何 [=27= 之外实现]块。下一步可以根据 return 类型决定。