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

Фотография

Проблемы с методом Actions#doubleClick

mouse action

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

#1 vetal_l

vetal_l

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

  • Members
  • Pip
  • 12 сообщений

Отправлено 24 июля 2014 - 08:41

        Привет всем! У меня проблема с отработкой метода Actions#doubleClick. В чём суть: дабл клик отрабатывает не на том локаторе который был указан, то есть кликает не там где нужно. Если же я делаю обычный клик по элементу "driver.findElement(By.xpath("//*[contains(text(),'TableDisplayMode')]")).click()", то он кликает там где нужно. Я перепробывал уже всё что знал, но всё напрасно. Вот кусок кода:

 

public void performDoubleClick(String locator) {
             // вешаю событие сподсветкой на всю страницу что бы видеть где кликает;
            ((JavascriptExecutor)driver).executeScript("$(document).on(\"click\", function(event) {\n" +
                    "   event.target.style.backgroundColor = \"red\";\n" +
                    "   console.log('click on: ' + event.target)\n" +
                    "});");
           /**
             *  если заменить нижнюю строку на вот эту driver.findElement(By.xpath("//*[contains(text(),'TableDisplayMode')]")).click(), то клик подсвечивается на нужном элементе,
             *  но если нижний метод, то кликает на логотип в левом верхнем углу;
           */
            new Actions(driver).moveToElement(driver.findElement(By.xpath("//*[contains(text(),'TableDisplayMode')]"))).doubleClick().perform();
}
 

 Спасибо за помощь!


  • 0

#2 vmaximv

vmaximv

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

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

Отправлено 24 июля 2014 - 08:53

Указатель мыши из браузера уберите.
  • 0

#3 vetal_l

vetal_l

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

  • Members
  • Pip
  • 12 сообщений

Отправлено 24 июля 2014 - 09:27

  К сожалению не помогло, но заметил что в Firefox отрабатывает нормально, а вот для IE10 и Chrome нет. Просто в ФФ и с курсором на странице всё норм. 


  • 0

#4 vmaximv

vmaximv

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

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

Отправлено 24 июля 2014 - 09:39

Вы что-то не договариваете. Я бы поверил, если было бы Хром - ок, ФФ и ИЕ - не ок. Так как по умолчанию ФФ и ИЕ работают через нативные эвенты ОС, а Хром - через js.
  • 0

#5 yulia_st

yulia_st

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

  • Members
  • Pip
  • 25 сообщений

Отправлено 24 июля 2014 - 09:46

    

могу поделиться кодом дабл клика на джаве, если подойдет.


  • 0

#6 vetal_l

vetal_l

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

  • Members
  • Pip
  • 12 сообщений

Отправлено 24 июля 2014 - 09:53

Та вот если бы я знал что ещё не так, то я вам обязательно бы написал. Может то что сайт написан на GWT, у меня просто больше нет идей. Хорошо, спасибо за помощь, буду искать решения.


  • 0

#7 vetal_l

vetal_l

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

  • Members
  • Pip
  • 12 сообщений

Отправлено 24 июля 2014 - 09:54

Давайте, можно попробовать ваш вариант.


  • 0

#8 yulia_st

yulia_st

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

  • Members
  • Pip
  • 25 сообщений

Отправлено 24 июля 2014 - 09:55

Давайте, можно попробовать ваш вариант.

 

public boolean doubleClick(String xpath) {
        try {
            WebElement webElement = driver.findElement(By.xpath(xpath));
            Actions builder = new Actions(driver);
            if (webElement == null) {
                return false;
            }
            builder.moveToElement(webElement).doubleClick().build().perform();
            return true;
        } catch (Exception e) {
            return false;
        }
}

  • 0

#9 vetal_l

vetal_l

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

  • Members
  • Pip
  • 12 сообщений

Отправлено 24 июля 2014 - 10:11

Не помогло. Всё равно спасибо.


  • 0

#10 vetal_l

vetal_l

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

  • Members
  • Pip
  • 12 сообщений

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

Ещё один вопрос, если можно. Я попробовал выяснить координаты елемента с помощью element.getLocation() или в консоли $( 'element' ).position() и выяснилось что в ФФ x=3, y=160, а для Chrome, IE это x=0, y=0. Поэтому и клик отрабатывает по соответствующим координатам. Не в курсе почему так и можно ли это как-то решить?


  • 0

#11 vmaximv

vmaximv

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

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

Отправлено 24 июля 2014 - 12:15

Какие версии селениума, драйверов, браузеров?
  • 0

#12 yulia_st

yulia_st

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

  • Members
  • Pip
  • 25 сообщений

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

Не помогло. Всё равно спасибо.

покажите свой код


  • 0

#13 vetal_l

vetal_l

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

  • Members
  • Pip
  • 12 сообщений

Отправлено 24 июля 2014 - 14:04

Selenium - 2.41.0
ChromeDriver - v2.9.248315, InternetExplorerDriver - 2.39.0.0

Chrome - Version 36.0.1985.125 m

IE  - 10.0.9

FF - 30.0


  • 0

#14 vetal_l

vetal_l

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

  • Members
  • Pip
  • 12 сообщений

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

public void doubleClick(String compName) {
           ((JavascriptExecutor)driver).executeScript("$(document).on(\"click\", function(event) {\n" +
                    "   event.target.style.backgroundColor = \"red\";\n" +
                    "   console.log('click on: ' + event.target)\n" +
                    "});");
            WebElement e = driver.findElement(By.xpath("//tr[td/table/tbody/tr/td/div[@class='gwt-Label' and text()='DisplayModes']]/td[2]/table/tbody/tr/td[1]/select[@class='gwt-ListBox']/option[@value='" + compName + "']"));
            System.out.println(e.getLocation());
            new Actions(driver).moveToElement(e)
                    .click().perform();
        }

  • 0

#15 BabyRoot

BabyRoot

    Специалист

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


Отправлено 24 июля 2014 - 14:08

Селениум с драйверами для ИЕ и хрома нужно обновить.


  • 0

#16 vmaximv

vmaximv

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

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

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

IEExplorerDriver точно не свежий - обновить будет не лишним.
Попробуйте брать другой элемент - парента или гранд парента.
Ну и край - вот код для получения координат через gwt api:
public Point getLocation(WebElement element) {
		String script = "return window.isc.Element.getElementRect(arguments[0]);";
		List<Long> res = (List<Long>) executeScript(script, element);
		return new Point(res.get(0).intValue(), res.get(1).intValue());
	}
public Dimension getSize(WebElement element) {
		String script = "return window.isc.Element.getElementRect(arguments[0]);";
		List<Long> res = (List<Long>) executeScript(script, element);
		return new Dimension(res.get(2).intValue(), res.get(3).intValue());
	}


  • 0

#17 vetal_l

vetal_l

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

  • Members
  • Pip
  • 12 сообщений

Отправлено 24 июля 2014 - 15:27

Обновил драйвера.

Попробовал получить координаты через gwt api методы, но на странице обьекта windows.isc нет, соответственно эти методы не отрабатывают.

Попробывал кликнуть по родителю (это select multiple), кликает и подсвечивает, но на option внутри select не хочет, по прежнему кликает по координатам 0, 0.

 

Просто не понятно почему если я делаю обычный клик:

WebElement element = driver.findElement(By.xpath("//select[@class='gwt-ListBox']/option[1]"));

element.click() // он кликает и выделяет option. Просто мне нужну сделать дабл клик чтобы перейти в этот элемент. Я пробывал сделать два клика, клик и ENTER, но не помогло;

 

Но когда делаю через mouse event:

new Actions(driver).moveToElement(element ).doubleClick().perform(); // он кликает, но кликает по координатам 0, 0.

  • 0

#18 vmaximv

vmaximv

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

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

Отправлено 25 июля 2014 - 06:00

Воспроизвести можете - http://samples.gwtpr...html#!CwListBox?
  • 0

#19 vetal_l

vetal_l

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

  • Members
  • Pip
  • 12 сообщений

Отправлено 25 июля 2014 - 08:06

Да, воспроизводится, точно так же ведёт себя.

http://samples.gwtpr...html#!CwListBox


  • 0

#20 vmaximv

vmaximv

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

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

Отправлено 25 июля 2014 - 10:15

Выписывайте баг - https://code.google....ium/issues/list
		WebDriver driver = new ChromeDriver();
		WebDriverWait wait = new WebDriverWait(driver,15);
		driver.get("http://samples.gwtproject.org/samples/Showcase/Showcase.html#!CwListBox");
		WebElement select = wait.until(presenceOfElementLocated(By.id("gwt-debug-cwListBox-multiBox")));
		WebElement option = select.findElement(By.xpath(".//option[1]"));		
		System.out.println("onScreen() - " + ((Locatable) option).getCoordinates().onPage());			
		System.out.println("Selected before click - " + option.getAttribute("selected"));

		new Actions(driver).click(option).perform();		
		System.out.println("Selected after click - " + option.getAttribute("selected"));
		driver.quit();

  • 0


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

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