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

时间:2017-11-16 23:45:02

标签: c# selenium selenium-webdriver

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

1 个答案:

答案 0 :(得分:1)

根据您的代码块,这是正确的行为, Private Sub ClearExistingHeaders(oDoc As Word.Document) Dim oSec As Word.Section, oHeader As HeaderFooter For Each oSec In oDoc.Sections For Each oHeader In oSec.Headers oHeader.Range.Delete Next Next End Sub WebDriverWait 是正确的。

根据documentation ElementIsVisible ExpectedConditions 将返回 ElementIsVisible 一旦它被定位并且可见。如果 IWebElement 失败,则会返回 ExpectedConditions 值。

与您定义的Boolean块一样:

try

试图:

var actual;

所以,无论来自 return actual; 的回复 ExpectedConditions ,您的 ElementIsVisible 块都会返回False Positive

解决方案:

try WebDriverWait 必须在任何 ExpectedConditions 块之外实施。可以根据返回类型确定后续步骤。