Как можно с помощью EventFiringWebDriver сделать обработчик событий который бы обрабатывал появление какого то элемента на странице?
Public driver As ChromeDriver
Отправлено 24 ноября 2016 - 13:35
Как можно с помощью EventFiringWebDriver сделать обработчик событий который бы обрабатывал появление какого то элемента на странице?
Public driver As ChromeDriver
Отправлено 24 ноября 2016 - 16:21
вот фрагмент примера (на Powershell) -
https://github.com/s...vent_firing.ps1
$event_firing_driver = New-Object -Type 'OpenQA.Selenium.Support.Events.EventFiringWebDriver' -ArgumentList @( $selenium) .... $navigating_handler = $event_firing_selenium.add_Navigating $navigating_handler.Invoke( { param( [object]$sender, [OpenQA.Selenium.Support.Events.WebDriverNavigationEventArgs]$eventargs ) Write-Host ($eventargs | Get-Member -MemberType Property) # [NUnit.Framework.Assert]::IsTrue(($eventargs.Driver.ToString() -eq 'OpenQA.Selenium.Support.Events.EventFiringWebDriver')) [NUnit.Framework.Assert]::IsTrue(($eventargs.Url -ne $null)) }) $element_value_changing_handler = $event_firing_selenium.add_ElementValueChanging $element_value_changing_handler.Invoke( { param( [object]$sender, [OpenQA.Selenium.Support.Events.WebElementEventArgs]$eventargs ) Write-Host 'Value Change handler' -foreground 'Yellow' if ($eventargs.Element.GetAttribute('id') -eq 'lst-ib') { $xpath1 = "//div[@class='sbsb_a']" try { [OpenQA.Selenium.IWebElement]$local:element = $sender.FindElement([OpenQA.Selenium.By]::XPath($xpath1)) } catch [exception]{ } Write-Host $local:element.Text -foreground 'Blue' } })
Отправлено 24 ноября 2016 - 17:08
вот фрагмент примера (на Powershell) -
https://github.com/s...vent_firing.ps1
$event_firing_driver = New-Object -Type 'OpenQA.Selenium.Support.Events.EventFiringWebDriver' -ArgumentList @( $selenium) .... $navigating_handler = $event_firing_selenium.add_Navigating $navigating_handler.Invoke( { param( [object]$sender, [OpenQA.Selenium.Support.Events.WebDriverNavigationEventArgs]$eventargs ) Write-Host ($eventargs | Get-Member -MemberType Property) # [NUnit.Framework.Assert]::IsTrue(($eventargs.Driver.ToString() -eq 'OpenQA.Selenium.Support.Events.EventFiringWebDriver')) [NUnit.Framework.Assert]::IsTrue(($eventargs.Url -ne $null)) }) $element_value_changing_handler = $event_firing_selenium.add_ElementValueChanging $element_value_changing_handler.Invoke( { param( [object]$sender, [OpenQA.Selenium.Support.Events.WebElementEventArgs]$eventargs ) Write-Host 'Value Change handler' -foreground 'Yellow' if ($eventargs.Element.GetAttribute('id') -eq 'lst-ib') { $xpath1 = "//div[@class='sbsb_a']" try { [OpenQA.Selenium.IWebElement]$local:element = $sender.FindElement([OpenQA.Selenium.By]::XPath($xpath1)) } catch [exception]{ } Write-Host $local:element.Text -foreground 'Blue' } })
Спасибо, попробую перевести на VB...
Отправлено 25 ноября 2016 - 03:24
вот скриншот что https://github.com/s...vent_firing.ps1 делает. сигнатуры методов напоминают Windows.Forms.
если возникнут вопросы пишите
Отправлено 25 ноября 2016 - 07:29
Я разобрался. Оказалось что этот метод не совсем то что нужно мне. Он отслеживает события инициированные WebDriver, а мне необходимо поймать событие инициированное самой веб страницей.
Наверное придется реализовать этот метод в отдельном потоке.
Отправлено 25 ноября 2016 - 22:38
интересное отличие - а чем по вашему инициируются события, инициированные WebDriver ? или вы имеете в виду http://toolsqa.com/s...ver-waits-in-c/ ? примеров полно на SO
Отправлено 28 ноября 2016 - 06:58
интересное отличие - а чем по вашему инициируются события, инициированные WebDriver ? или вы имеете в виду http://toolsqa.com/s...ver-waits-in-c/ ? примеров полно на SO
Видимо я не совсем верно выразил свою мысль. Мне нужно что бы ожидание ожидание появления какого то элемента на странице не прерывало работы программы. Поэтому я организовал его в отдельном потоке. А так как элементов которые могут появится много, то я просто сделал в отдельном потоке проверку наличия определенных элементов с периодичностью в 5 сек.
Сначала я думал, что можно будет сделать обработчик событий по типу обработчика события клика мышкой в окне формы. Но, потом понял, что так не получится сделать стандартными методами webdriver.
Но, в общем то, было бы не плохо иметь такой метод который позволял бы не прерывая работу основной программы ожидать появление элемента по заданным параметрам и в случае его появления отрабатывать какой то код.
0 пользователей, 0 гостей, 0 анонимных