1

我使用了下面的代码,发现 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; // 列表,但如果元素不存在,它就不能正常工作

4

1 回答 1

1

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

根据documentation, ExpectedConditionswithElementIsVisible将返回它IWebElement一旦找到并可见。如果ExpectedConditions失败,Boolean则返回一个值。

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

var actual;

并试图:

return actual;

因此,无论您的块返回ExpectedConditions的返回如何。ElementIsVisibletryFalse Positive

解决方案 :

WebDriverWaitwithExpectedConditions必须在任何Try-Catch块之外实现。可以根据返回类型决定下一步。

于 2017-11-17T08:09:02.727 回答