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

Фотография

WebDriver Ошибочный клик по элементу

WebDriver selenium Ошибочный клик по элементу

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

#1 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 17 апреля 2014 - 10:47

Язык C#, Selenium, WebDriver

Подскажите, кто сталкивался с проблемой ошибочного клика по элементу. Замечено в FireFox и Chrom, в IE как не странно работает правильно ))
Если да то как решили это?

D.FindElementByXPath(viewSelectBtn).Click();

Клик происходит не по найденному элементу, а по элементу из выпадающего меню.
Такое ощущение, что курсор мыши проходит по всплывающему меню, в этот момент происходит перекрытие найденного элемента элементом из всплывающего меню и клик происходим на элементе меню.

Как быть?
Можно ли задать чтобы курсор мыши передвигался снизу?
Курсора мыши не видно, вообще каким образом реализованы в Selenium клики по элементу, подскажите кто знает?

 

P.s. Но что удивительно, если с начало кликнуть по другому элементу на странице, то следом за этим клик по 

D.FindElementByXPath(viewSelectBtn).Click();

проходит успешно.


  • 0

#2 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 17 апреля 2014 - 10:59

У селениума "курсор мыши есть", но он "невидимый".

И он не двигается, перемещаясь с одного элемента страницы на другой.

Представьте, что экран - двумерная картинка, а курсор селениума - это Ваш палец. Для того чтобы кликнуть на элементе, Вы просто кликаете, а не ведёте пальцем по экрану до нужного элемента.

"Движение" можно заметить только при DRAG&DROP.

 

Так что, если селениум кликает на элементе выпадающего меню, значит этот элемент удовлетворяет условиям поиска ХРАТН.

 

P.S. А что за язык-то?


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#3 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 17 апреля 2014 - 11:13

У селениума "курсор мыши есть", но он "невидимый".

И он не двигается, перемещаясь с одного элемента страницы на другой.

Представьте, что экран - двумерная картинка, а курсор селениума - это Ваш палец. Для того чтобы кликнуть на элементе, Вы просто кликаете, а не ведёте пальцем по экрану до нужного элемента.

"Движение" можно заметить только при DRAG&DROP.

 

Так что, если селениум кликает на элементе выпадающего меню, значит этот элемент удовлетворяет условиям поиска ХРАТН.

 

P.S. А что за язык-то?

 

Спасибо что объяснили как работает клик в Seleniume, очень подробно и понятно.

Язык - C#

viewSelectBtn - переменная типа string в ней селектор XPath

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

"Так что, если селениум кликает на элементе выпадающего меню, значит этот элемент удовлетворяет условиям поиска ХРАТН." - по селектору XPATH на странице находится единственный элемент. Кликает в областе найденного элемента, но не по найденному элементу. И непонятно почему выпадает меню во время клика.

Подскажите каким образом с этим разобраться?

Как можно перед кликом, получить координаты клика?


  • 0

#4 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 17 апреля 2014 - 11:18

Как вы проверяете на уникальность селектор?


  • 0

#5 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 17 апреля 2014 - 11:20

Попробуйте в режиме дебага поставить брейкпоинт на этой строчке и посмотреть свойства объекта D.FindElementByXPath(viewSelectBtn). Тот ли это элемент, который Вы ожидаете?


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#6 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 17 апреля 2014 - 11:57

Как вы проверяете на уникальность селектор?

 

XPath проверяю в FireFox через FirePath


  • 0

#7 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 17 апреля 2014 - 11:58

Попробуйте в режиме дебага поставить брейкпоинт на этой строчке и посмотреть свойства объекта D.FindElementByXPath(viewSelectBtn). Тот ли это элемент, который Вы ожидаете?

 

Проверял, находит правильный элемент.

Еще предложения какие есть?


  • 0

#8 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 17 апреля 2014 - 12:05

Раз тут всплыло слово "селект", вопрос - вам надо выбрать какой-то элемент в селекте?


  • 0

#9 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 17 апреля 2014 - 12:37

Раз тут всплыло слово "селект", вопрос - вам надо выбрать какой-то элемент в селекте?

 

Речь идет не про "селект", а про "селектор XPath".

Элемент по которому производится клик, это ссылка.


  • 0

#10 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


Отправлено 17 апреля 2014 - 12:42

Используйте actions.moveToElement ... 

Сначала подведите к элементу что ниже, а затем подведите и кликните на нужном, может прокатит...


  • 1

#11 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 17 апреля 2014 - 12:43

У селениума "курсор мыши есть", но он "невидимый".
И он не двигается, перемещаясь с одного элемента страницы на другой.

Ой-ли?

html:

<html>
<head></head>
<body>
<div style='height:100px;width:100px;border-style:solid;border-width:1px' onmouseover='this.style.color="red"'>hello</div>
<input type='button' value='PushMe'/>
</body>
</html>
code:

		WebDriver driver = new FirefoxDriver();
		driver.get("file://///alex/temp/test1.html");
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.findElement(By.xpath("//input")).click();
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.quit();
output:

height: 100px; width: 100px; border-style: solid; border-width: 1px;
height: 100px; width: 100px; border-style: solid; border-width: 1px; color: red;

  • 1

#12 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 17 апреля 2014 - 13:10

 

У селениума "курсор мыши есть", но он "невидимый".
И он не двигается, перемещаясь с одного элемента страницы на другой.

Ой-ли?

html:

<html>
<head></head>
<body>
<div style='height:100px;width:100px;border-style:solid;border-width:1px' onmouseover='this.style.color="red"'>hello</div>
<input type='button' value='PushMe'/>
</body>
</html>
code:

		WebDriver driver = new FirefoxDriver();
		driver.get("file://///alex/temp/test1.html");
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.findElement(By.xpath("//input")).click();
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.quit();
output:

height: 100px; width: 100px; border-style: solid; border-width: 1px;
height: 100px; width: 100px; border-style: solid; border-width: 1px; color: red;

 

Подскажите, как можно избежать проблемы возникшей в моем случае с выпадающем меню.


  • 0

#13 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 17 апреля 2014 - 13:19

Вам уже ответили.

Используйте actions.moveToElement ... 
Сначала подведите к элементу что ниже, а затем подведите и кликните на нужном, может прокатит...

А так как мы не видим лэйаут вашей страницы, общий совет такой - используйте Actions и лавируйте мышкой, что бы избежать попадания на drop_down_menu.
А еще лучше выпишите баг на юзабилити - подобные меню, без дэлея на экспанд жутко бесят не только WD, но и пользователей.
  • 1

#14 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 17 апреля 2014 - 13:59

Используйте actions.moveToElement ... 

Сначала подведите к элементу что ниже, а затем подведите и кликните на нужном, может прокатит...

 

Спасибо за совет буду пробовать


  • 0

#15 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 17 апреля 2014 - 14:06

Вам уже ответили.

Используйте actions.moveToElement ... 
Сначала подведите к элементу что ниже, а затем подведите и кликните на нужном, может прокатит...

А так как мы не видим лэйаут вашей страницы, общий совет такой - используйте Actions и лавируйте мышкой, что бы избежать попадания на drop_down_menu.
А еще лучше выпишите баг на юзабилити - подобные меню, без дэлея на экспанд жутко бесят не только WD, но и пользователей.

 

 

Спасибо.


  • 0

#16 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 17 апреля 2014 - 15:02

 

У селениума "курсор мыши есть", но он "невидимый".
И он не двигается, перемещаясь с одного элемента страницы на другой.

Ой-ли?

html:

<html>
<head></head>
<body>
<div style='height:100px;width:100px;border-style:solid;border-width:1px' onmouseover='this.style.color="red"'>hello</div>
<input type='button' value='PushMe'/>
</body>
</html>
code:

		WebDriver driver = new FirefoxDriver();
		driver.get("file://///alex/temp/test1.html");
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.findElement(By.xpath("//input")).click();
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.quit();
output:

height: 100px; width: 100px; border-style: solid; border-width: 1px;
height: 100px; width: 100px; border-style: solid; border-width: 1px; color: red;

В момент клика "мышка" "появляется" на элементе - всё правильно.

Попробуйте другой тест:

1) квадрат, в левом верхнем углу кнопка, в центре большая кнопка размером почти с квадрат и в правом нижнем углу кнопка.

2) свойства у кнопок следующие:

- левая верхняя - просто для клика

- центральная большая с жаваскриптом, изменяющим цвет при действии onmouseover

- правая нижняя - просто для клика

3) выполните вебдрайвером клик по левой верхней кнопке потом клик по правой нижней кнопке.

 

Если вебдрайвер ведёт курсор мышки, центральная большая кнопка изменит цвет.

Но она не изменит его. Попробуйте.


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#17 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 18 апреля 2014 - 05:36

В момент клика "мышка" "появляется" на элементе - всё правильно.

Вы похоже прочитали мой пример "сквозь пальцы".

Ну давайте на вашем:

html:

<html>
<head></head>
<body>
<div id='first' style='position:absolute;left:10px;top:10px;height:20px;width:30px;border-style:solid;border-width:1px'>first</div>
<div id='second' style='position:absolute;left:35px;top:35px;height:100px;width:100px;border-style:solid;border-width:1px' onmouseover='this.style.color="red"'>second</div>
<div id='third' style='position:absolute;left:140px;top:140px;height:20px;width:30px;border-style:solid;border-width:1px'>third</div>
</body>
</html>
code:

		WebDriver driver = new FirefoxDriver();
		driver.get("file://///alex/temp/test1.html");
		System.out.println(driver.findElement(By.xpath("//div[@id='second']")).getAttribute("style"));
		driver.findElement(By.xpath("//div[@id='first']")).click();
		driver.findElement(By.xpath("//div[@id='third']")).click();
		System.out.println(driver.findElement(By.xpath("//div[@id='second']")).getAttribute("style"));
		driver.quit();
output:

position: absolute; left: 35px; top: 35px; height: 100px; width: 100px; border-style: solid; border-width: 1px;
position: absolute; left: 35px; top: 35px; height: 100px; width: 100px; border-style: solid; border-width: 1px; color: red;

  • 1

#18 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 18 апреля 2014 - 05:49

 

 

У селениума "курсор мыши есть", но он "невидимый".
И он не двигается, перемещаясь с одного элемента страницы на другой.

Ой-ли?

html:
<html>
<head></head>
<body>
<div style='height:100px;width:100px;border-style:solid;border-width:1px' onmouseover='this.style.color="red"'>hello</div>
<input type='button' value='PushMe'/>
</body>
</html>
code:
		WebDriver driver = new FirefoxDriver();
		driver.get("file://///alex/temp/test1.html");
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.findElement(By.xpath("//input")).click();
		System.out.println(driver.findElement(By.xpath("//div")).getAttribute("style"));
		driver.quit();
output:
height: 100px; width: 100px; border-style: solid; border-width: 1px;
height: 100px; width: 100px; border-style: solid; border-width: 1px; color: red;

В момент клика "мышка" "появляется" на элементе - всё правильно.

Попробуйте другой тест:

1) квадрат, в левом верхнем углу кнопка, в центре большая кнопка размером почти с квадрат и в правом нижнем углу кнопка.

2) свойства у кнопок следующие:

- левая верхняя - просто для клика

- центральная большая с жаваскриптом, изменяющим цвет при действии onmouseover

- правая нижняя - просто для клика

3) выполните вебдрайвером клик по левой верхней кнопке потом клик по правой нижней кнопке.

 

Если вебдрайвер ведёт курсор мышки, центральная большая кнопка изменит цвет.

Но она не изменит его. Попробуйте.

 

 

Проверил, получается что vmaximv прав

Проверка:

<head></head>
<body>
<div style='height:100px;width:100px;border-style:solid;border-width:1px' onmouseover='this.style.color="red"'>hello
<input id="b2" type='button' value='PushMe'/>
</div>
<input id="b1" type='button' value='B1111111111111111111111'/>
</body>
</html>
            D.Navigate().GoToUrl(@"file:///D:/1.html");
            var b1 = D.FindElementById("b1");
            D.FindElementById("b1").Click();// тут ставил брекпоинт. После клика по input id="b1" у div появлялась красная рамка.
            var b2 = D.FindElementById("b2");
            D.FindElementById("b2").Click();

Подскажите можно ли отключить при работе с кликами срабатывания события "onmouseover", в моем случае это событие вообще ненужно в некоторых тестах


  • 0

#19 vmaximv

vmaximv

    Опытный участник

  • Members
  • PipPipPipPip
  • 350 сообщений

Отправлено 18 апреля 2014 - 06:07

Как вариант - выключите нативные ивенты nativeEvents


  • 0

#20 fenixx

fenixx

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

  • Members
  • Pip
  • 29 сообщений
  • Город:Москва

Отправлено 18 апреля 2014 - 06:24

Как вариант - выключите нативные ивенты nativeEvents

 

Спасибо за ссылку.

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

Но мне нужно отключить событие onmouseover для всех браузеров, в частности Chrom, FireFox, Safari, IE.

Кто может подсказать как это можно сделать через WebDriver или каким другим способом.


  • 0



Темы с аналогичным тегами WebDriver, selenium, Ошибочный клик по элементу

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

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