BobbyStrain Ответов: 1

Vb.net код для неявного ожидания selenium


Мне не удалось получить простую строку кода для реализации неявного ожидания selenium. Не могли бы вы прислать мне справку? Версия C# не работает. Вот код C#.
использование (драйвер IWebDriver = новый FirefoxDriver())
{
водитель.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
водитель.URL-адрес = "http://somedomain/url_that_delays_loading";
IWebElement myDynamicElement = драйвер.FindElement(By.Id("someDynamicElement"));
}

Что я уже пробовал:

Обширный поиск в интернете. Только можно найти код для C# и Java.

David_Wimbley

Можете ли вы опубликовать версию C#, я проделал кучу работы с selenium и нашел функцию ожидания, которая работает для меня, но я не знаю, что вы подразумеваете под "неявным ожиданием"

BobbyStrain

Дэвид я добавил код к вопросу. Там, кажется, не так много пользы от Селена с vb.net-да.

David_Wimbley

Так что мне кажется, вы пытаетесь дождаться, пока что-то на странице загрузится правильно? Или, скорее, вы хотите, чтобы selenium подождал, пока он не сможет увидеть все, что находится на странице, прежде чем начать...например: вы хотите, чтобы selenium подождал, пока он не сможет видеть/взаимодействовать с "someDaynamicElement", верно?

1 Ответов

Рейтинг:
0

David_Wimbley

Я думаю, что вы, возможно, захотите заглянуть в класс WebDriverWait в selenium. Я в основном работаю с selenium в C#, так что, надеюсь, этот код верен в VB.net (я не проверял его).

Сначала я начну с примера C#

var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 45));
wait.IgnoreExceptionTypes(typeof(StaleElementReferenceException));
			
wait.Until(webDriver =>
{
	return webDriver.FindElements(By.Id("someDynamicElement")).Where(m => m.Displayed).Any();
});


Итак, идея заключается в том, что wait.Until будет продолжать цикл до тех пор, пока не будет выполнено условие, которое является истинным (xml-документ по этому методу глуп, он говорит: "пока условие не будет ни нулевым, ни ложным"...так что пока оно не будет истинным).

Кроме того, вы даете ему максимальный тайм-аут в 45 секунд, так что если он находит то, что ему нужно, за 2 секунды, отлично, если это займет 10 секунд, то это тоже прекрасно...вам не нужно требовать, чтобы селен ждал X секунд без необходимости-это идея.

Так что преобразование его в vb.net я думаю, было бы что-то вроде этого.

Dim wait As New WebDriverWait(webDriver, TimeSpan.FromSeconds(seconds))
wait.Until(Function(webDriver)
  Return webDriver.FindElement(By.Id("someDynamicElement")).Enabled And webDriver.FindElement(By.Id("someDynamicElement")).Displayed
End Function)


Единственным недостатком этого является то, что при каждой загрузке страницы вам нужно будет использовать приведенный выше образец по крайней мере для первого элемента, так что вам не придется прибегать к Thread.Sleep или что-то в этом роде.


BobbyStrain

Дэвид, Спасибо тебе за помощь. Я над этим поработаю. Но этот код, по-видимому, нацелен на один элемент по идентификатору, а не на все элементы. Я ищу код, который будет ждать любого элемента, а не конкретного. Но я могу работать с вашим кодом. Это то, что я могу понять, в отличие от большей части кода, который я нашел.

David_Wimbley

Да, к сожалению, я не знаю способа, который будет ждать всех элементов, которые работают...это было то, что я обнаружил, работало на меня.