Попробуйте блокировать сценарий, не обрабатывая его, когда элемент не найден

Я использовал приведенный ниже код и обнаружил, что блок 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; // список, но он не работает, если элемент отсутствует


person Mike ASP    schedule 16.11.2017    source источник
comment
Что значит не в состоянии справиться со сценарием? Вы получаете ошибку?   -  person John Wu    schedule 17.11.2017
comment
да, я получаю сообщение об ошибке: openqa.selenium.webdrivereexception Время ожидания HTTP-запроса к удаленному WebDriver истекло через 60 секунд. Каким-то образом я получил журнал трассировки, код syas которого может попасть в блок Catch, но опять же, я не уверен, почему он там застрял. почему водитель не смог двигаться дальше?   -  person Mike ASP    schedule 17.11.2017
comment
Пожалуйста, поделитесь кодом, где вы вызываете эту функцию. Поскольку вы сказали, что блок catch был обработан, проблема, вероятно, возникает после того, как он возвращает false. Что вы делаете после получения ложного ответа?   -  person HaC    schedule 17.11.2017


Ответы (1)


Согласно вашему блоку кода, это правильное поведение, поскольку WebDriverWait с ElementIsVisible правильно.

Согласно documentation, ExpectedConditions с ElementIsVisible вернет IWebElement, как только он будет обнаружен и станет видимым. В случае сбоя ExpectedConditions возвращается значение Boolean.

Как и в вашем блоке try, вы определяете:

var actual;

И пытаясь:

return actual;

Таким образом, независимо от возврата из ExpectedConditions с ElementIsVisible ваш блок try возвращает False Positive.

Решение :

WebDriverWait с ExpectedConditions должны быть реализованы вне любого блока Try-Catch. Следующие шаги могут быть определены в отношении типа возвращаемого значения.

person DebanjanB    schedule 17.11.2017
comment
да, я определил «WebDriverWait» снаружи, и я проверял множество вещей вне фактической тестовой логики. - person Mike ASP; 08.05.2018