Более простой способ сделать это - использовать ("*")
, который дает все прямые дочерние элементы узла контекста.
Реализация:
WebDriver driver = DriverFactory.getWebDriver()
//get the parent element
WebElement slotsGrid = driver.findElement(By.id('js-' + numOfSlots + '-grid'))
//use the parent element to get all the immediate children
List<WebElement> children = slotsGrid.findElements(By.xpath("*"))
. Я стерла и перезапустила весь мой ответ: вы наткнулись на хороший случай противоречивой документации и предупреждений ...
Согласно .NET 2.0 MSDN Документация для SqlCommand.Cancel «Метод Cancel нельзя использовать для отмены ожидающей асинхронной операции». Однако та же самая документация для .NET 3.5 не содержит этого предупреждения - несмотря на то, что в остальном она идентична документации 2.0.
Я бы посоветовал следовать соглашениям, изложенным в Вызов синхронных методов асинхронно , который предназначен для делегата. BeginInvoke (не Control.BeginInvoke!) И Delegate.EndInvoke, но, скорее всего, уместно в вашем случае.
Методы с именем «Begin ... Async», которые возвращают IAsyncResult и имеют соответствующий метод «End ...», имеют потенциал для создания утечки ThreadPool. Самый простой способ предотвратить утечку - это всегда вызывать соответствующий метод «End ...».
Причина в том, что при вызове Begin ... Async он получает поток из ThreadPool и (обычно) выполняет синхронную версию метода в рабочем потоке; в вашем случае ExecuteReader (). Возвращаемое значение этого вызова или любые исключения, возникающие во время этого вызова, не возвращаются в основной поток до тех пор, пока не будет вызван End ... - если вы никогда не вызываете End, тогда результаты / исключения никогда не возвращаются, а поток ThreadPool никогда не освобождается
Короче говоря, вы, вероятно, в безопасности, если обязательно вызовете EndExecuteReader () и обработаете ожидаемое исключение. Поскольку документация противоречива и расплывчата, я начал обсуждение на форумах MSDN Feedback .
Имейте беглый взгляд на http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=98217, где точно об этом поведении сообщили.
Таким образом, похоже, что необходимо просто поймать это определенное исключение добавленный EndExecuteReader и проигнорировать его.