t.me/atinfo_chat Telegram группа по автоматизации тестирования

Метод release с класса AdvancedUserInteractions не работает


(s.kaliberda) #1

Нужно автоматизировать нажатие на кнопку подтверждения в сплывающем окне. 
С помощью стандартного

driver.click()

- это сделать не получается, т.к. при простом клике popup окно не появляется, нужно еще и мышу держать над ссылкой.
Попробовал использовать класс AdvancedUserInteractions, но тут тоже возникла проблема.
Метод clickAndHold() - отрабатывает весьма успешно, после чего сессия браузера просто висит, до тех пор пока, вручную не пошевелишь мышью, только после этого метод release() выполняется и соответственно появляется всплывающее окно и тест проходит.
Может быть я делаю что-то не так. Как заставить метод release() выполнятся непосредственно после метода clickAndHold() без всякой помощи из вне?



Actions builder = new Actions(driver);
builder.clickAndHold(driver.findElement(By.xpath("//a[@id='cart-clear-button']"))).build().perform();
builder.release(driver.findElement(By.xpath("//a[@id='cart-clear-button']"))).build().perform();


Может быть кто-то сталкивался с такой проблемой? Заранее спасибо за помощь!

 


(Taras) #2

может тут лучше робот класс юзать ?


(Kedanachi) #3

Попробуйте следующее. Может поможет.

builder.moveToElement(driver.findElement(By.xpath("//a[@id='cart-clear-button']"))).click().build().perform();

 


(s.kaliberda) #4

Пытался использовать этот вариант. Робот класс может только кликнуть по координатам.

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

Web Driver не имеет методов getElementPositionLeft(), getElementPositionTop(), которые есть у Selenium RC.

Пытался сделать с помощью javascript, но функция возвращает null.

 

public void robotMouseMoveAndClick() throws Exception{
    Robot robot = new Robot();
//  GET ELEMENT POSITION
    int topElementPosition =  (Integer)(executeJavascript(driver, "document.getElementById('cart-clear-button').style.top"));
    int leftElementPosition = (Integer)(executeJavascript(driver, "document.getElementById('cart-clear-button').style.left"));
    System.out.println("TOP: "+ topElementPosition);
    System.out.println("LEFT: "+ leftElementPosition);
//  SET THE MOUSE X Y POSITION
    robot.mouseMove(topElementPosition, leftElementPosition); 
//  LEFT CLICK
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
}
Проблема все еще актуальна, буду рад услышать любые варианты решения проблемы.
 

(s.kaliberda) #5

Все еще актуально. Помогите решить проблему.


(Mykhailo Poliarush) #6

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

http://automated-testing.info/forum/kak-sdelat-screenshot-elementa


(Kedanachi) #7

Вебдрайвер запускает javascript'ы в анонимных функциях. Поэтому, что бы оно что-то вернуло необходимо добавить return.

Так же, не забывайте, что JavascriptExecutor не взвращает Integer, а только Long. Поэтому нужно кастить к Long, а потом взять int value.


(Kedanachi) #8

Было бы здорово получить доступ к такой страничке. Получилось бы помочь гораздо быстрее. Есть ли такая возможность?


(s.kaliberda) #9

К сожалению, доступа нету. Только локальный инвайермент.


(s.kaliberda) #10

Всем огромное спасибо за помощь!

Решил эту проблему следующим образом:

 

public void robotMouseMoveAndClick() throws Exception{
	Robot robot = new Robot();
//	GET ELEMENT POSITION
	int leftElementPosition = driver.findElement(By.xpath(elementLocator)).getLocation().getX();
	int topElementPosition = driver.findElement(By.xpath(elementLocator)).getLocation().getY();
	System.out.println("LEFT: "+ leftElementPosition);
	System.out.println("TOP: "+ topElementPosition);
// 	SET THE MOUSE X Y POSITION
	robot.mouseMove(leftElementPosition, topElementPosition); 
// 	LEFT CLICK
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
}

(Taras) #11

а я же говорил что роботом решиться)


(Mykhailo Poliarush) #12

конечно роботом решиться, там все кликается по координатам, как он может не работать :)