Перейти к содержимому

Фотография

Selenium + VB.NET Обработчик событий.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 MasterNK

MasterNK

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Эд

Отправлено 24 ноября 2016 - 13:35

Как можно с помощью EventFiringWebDriver сделать обработчик событий который бы обрабатывал появление какого то элемента на странице?

 

Public driver As ChromeDriver

Public service As OpenQA.Selenium.Chrome.ChromeDriverService=OpenQA.Selenium.Chrome.ChromeDriverService.CreateDefaultService()
Public chromeOptions As New OpenQA.Selenium.Chrome.ChromeOptions()
Dim eventDriver As New EventFiringWebDriver(driver)
 
а что дальше? кто подскажет?

  • 0

#2 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 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'
    }

  })



  • 0

#3 MasterNK

MasterNK

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Эд

Отправлено 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...


  • 0

#4 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 25 ноября 2016 - 03:24

126.png

 

вот скриншот что https://github.com/s...vent_firing.ps1  делает. сигнатуры методов напоминают Windows.Forms.

 

если возникнут вопросы пишите


  • 0

#5 MasterNK

MasterNK

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Эд

Отправлено 25 ноября 2016 - 07:29

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

Наверное придется реализовать этот метод в отдельном потоке.


  • 0

#6 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 25 ноября 2016 - 22:38

интересное отличие  -  а чем по вашему инициируются события, инициированные  WebDriver ? или вы имеете в виду http://toolsqa.com/s...ver-waits-in-c/ ? примеров полно на SO


  • 0

#7 MasterNK

MasterNK

    Новый участник

  • Members
  • Pip
  • 6 сообщений
  • ФИО:Эд

Отправлено 28 ноября 2016 - 06:58

интересное отличие  -  а чем по вашему инициируются события, инициированные  WebDriver ? или вы имеете в виду http://toolsqa.com/s...ver-waits-in-c/ ? примеров полно на SO

Видимо я не совсем верно выразил свою мысль. Мне нужно что бы ожидание ожидание появления какого то элемента на странице не прерывало работы программы. Поэтому я организовал его в отдельном потоке. А так как элементов которые могут появится много, то я просто сделал в отдельном потоке проверку наличия определенных  элементов с периодичностью в 5 сек. 

Сначала я думал, что можно будет сделать обработчик событий по типу обработчика события клика мышкой в окне формы. Но, потом понял, что так не получится сделать стандартными методами webdriver. 

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


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных