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

Аудит и оптимизация QA-процессов
онлайн, начало 4 декабря
Практикум по тест-дизайну 2.0
онлайн, начало 4 декабря
Школа Тест-Аналитика
онлайн, начало 9 декабря
Школа тест-менеджеров v. 2.0
онлайн, начало 9 декабря
Фотография

ошибка: Element is not currently visible


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

#1 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 08 декабря 2011 - 14:09

Помогите пожалуйста. у меня есть невидимый элемент (plus), который появляется только при наведении мышки на другой элемент (tag).
У меня не получается воспроизвести это в Webdriver.
Может в моем коде ошибка?
Actions builder;
builder = new Actions(driver);
WebElement tag = driver.findElement(By.xpath("//div[contains(@class, 'tags-cloud')][1]/ul/li[@class='not-added']/a"));
WebElement plus = driver.findElement(By.xpath("//div[contains(@class, 'tags-cloud')][1]/ul/li[@class='not-added']//span[@class='tdtg-addTag add']"));
builder.moveToElement(tag).click(plus).build().perform();

здесь, когда доходит до строки builder.moveToElement(tag).click(plus).build().perform(); , тест сваливается с ошибкой "Element is not currently visible and so may not be interacted with".
Но ведь по идее в этой команде он наводит мышь на элемент и другой элемент должен появиться...
  • 0

#2 D2Phoenix

D2Phoenix

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

  • Members
  • PipPipPip
  • 200 сообщений
  • ФИО:Чадюк Вадим
  • Город:Гродно


Отправлено 08 декабря 2011 - 14:38

Actions builder;
builder = new Actions(driver);
WebElement tag = driver.findElement(By.xpath("//div[contains(@class, 'tags-cloud')][1]/ul/li[@class='not-added']/a"));
WebElement plus = driver.findElement(By.xpath("//div[contains(@class, 'tags-cloud')][1]/ul/li[@class='not-added']//span[@class='tdtg-addTag add']"));
builder.moveToElement(tag).click(plus).build().perform();
Возможно стоит так?
builder.moveToElement(tag).click(driver.findElement(By.xpath("//div[contains(@class, 'tags-cloud')][1]/ul/li[@class='not-added']//span[@class='tdtg-addTag add']"))).build().perform();
И xpath разве не меняется после того как элемент становится видимым?
  • 0

#3 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 08 декабря 2011 - 19:12

нет, xpath не меняется. если смотреть в firebug, то элемент серого цвета
  • 0

#4 D2Phoenix

D2Phoenix

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

  • Members
  • PipPipPip
  • 200 сообщений
  • ФИО:Чадюк Вадим
  • Город:Гродно


Отправлено 09 декабря 2011 - 06:33

А страницу на которой вы пытаетесь это сделать можно увидеть?
  • 0

#5 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 09 декабря 2011 - 06:53

да. вот страница. при наведении на ссылку Спорт появляется плюсик в правом верхнем углу от слова Спорт. В коде он почему то серый.... Причем когда писала эти тесты на selenium RC, то все прекрасно работало: при событии mouseOver() плюсик появлялся и на него можно было нажать.
а здесь не получается это воспроизвести.

Прикрепленные файлы


  • 0

#6 nstreltsov

nstreltsov

    Активный участник

  • Members
  • PipPip
  • 116 сообщений
  • ФИО:Стрельцов Николай Игоревич
  • Город:Москва


Отправлено 09 декабря 2011 - 11:55

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

public class MyTest extends TestBase {
	@Test
	public void testMyTest() {
		driver.get(baseUrl + "/");

		new Actions(driver).moveToElement(
				driver.findElement(By
						.xpath(".//*[@tagname='Вечеринки:Россия/Белгород']")))
				.perform();
		new Actions(driver)
				.moveToElement(
						driver.findElement(
								By.xpath(".//*[@class='popular-tags']"))
								.findElement(
										By.xpath(".//*[@class='tdtg-removeTag remove']")))
				.click().perform();
	}
}

Советую вам еще к firebug поставить FirePath, попроще находить и писать css или xpath
  • 0

#7 D2Phoenix

D2Phoenix

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

  • Members
  • PipPipPip
  • 200 сообщений
  • ФИО:Чадюк Вадим
  • Город:Гродно


Отправлено 09 декабря 2011 - 12:29

public class MyTest extends TestBase {
        @Test
        public void testMyTest() {
                driver.get(baseUrl + "/");

                new Actions(driver).moveToElement(
                                driver.findElement(By
                                                .xpath(".//*[@tagname='Вечеринки:Россия/Белгород']")))
                                .perform();
                new Actions(driver)
                                .moveToElement(
                                                driver.findElement(
                                                                By.xpath(".//*[@class='popular-tags']"))
                                                                .findElement(
                                                                                By.xpath(".//*[@class='tdtg-removeTag remove']")))
                                .click().perform();
        }
}
А у меня этот код просто нажимает на "Вечеринки"...

А вот так мне удалось нажать на крестик у "Вечеринки", но только по координатам. Буду думать дальше....
new Actions(driver)
				.moveToElement(
						driver.findElement(By
								.xpath(".//*[@tagname='Вечеринки:Россия/Белгород']")))
				.moveByOffset(50, -10)
				.click().build().perform();

  • 0

#8 nstreltsov

nstreltsov

    Активный участник

  • Members
  • PipPip
  • 116 сообщений
  • ФИО:Стрельцов Николай Игоревич
  • Город:Москва


Отправлено 09 декабря 2011 - 12:32

странно, у меня нажимает)
сначало подумал, что нажимает ток на первый элемент, вот так нажимает на Концерты
public class MyTest extends TestBase {
	@Test
	public void testMyTest() {
		driver.get(baseUrl + "/");

		new Actions(driver).moveToElement(
				driver.findElement(By
						.xpath(".//*[@tagname='Концерты:Россия/Белгород']")))
				.perform();
		new Actions(driver)
				.moveToElement(
						driver.findElement(
								By.xpath(".//*[@class='popular-tags']"))
								.findElement(
										By.xpath(".//*[@href='/tag/show/Концерты:Россия/Белгород']/span[2]")))
				.click().perform();

		TimerHelper helper = new TimerHelper();

		helper.timer(5000);

	}
}


Проверил в разных браузерах, нажимается нормально.
  • 0

#9 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 09 декабря 2011 - 12:50

это наверно удивительно, но у меня этот скрипт также отрабатывает с ошибкой
org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with

в чем в этом случае может быть проблема? я воспроизвожу тест в firefox.
  • 0

#10 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 09 декабря 2011 - 12:54

а по координатам можно вообще делать? или так не рекомендуется?
  • 0

#11 Serzhant

Serzhant

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Сергей К
  • Город:Минск

Отправлено 09 декабря 2011 - 13:19

Возможно появление ошибки из-за разных версий фаерфокса. Предположу что координаты в автоматических тестах испльзовать нельзя (т.к. при изменении их - Вам придётся переделывать тест, а уникальный и более-менее универсальный XPath останется тем-же)

PS Хотя тоже не панацея.
  • 0

#12 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 09 декабря 2011 - 13:56

Возможно появление ошибки из-за разных версий фаерфокса.

я тестирую в 8.0
  • 0

#13 D2Phoenix

D2Phoenix

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

  • Members
  • PipPipPip
  • 200 сообщений
  • ФИО:Чадюк Вадим
  • Город:Гродно


Отправлено 09 декабря 2011 - 14:00

а по координатам можно вообще делать? или так не рекомендуется?

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

но лучшебы найти более нормальный способ)
  • 0

#14 Serzhant

Serzhant

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Сергей К
  • Город:Минск

Отправлено 09 декабря 2011 - 14:27

Евгения, я начинающий тестер, но вот по этому пассу в IDE кликает по плюсу и он превращается в крестик. Правда у меня 3.6.2 стоит
//a/span[text()='Искусство']/../span[contains(@class,'add')]
Универсальность этого пути в том, что поменяв текст поиска - 'Искусство' (как в любой строке просто подставить тот тект который Вам надо) Вы можете нажать на тот элемент который необходим в данный момент.
  • 0

#15 D2Phoenix

D2Phoenix

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

  • Members
  • PipPipPip
  • 200 сообщений
  • ФИО:Чадюк Вадим
  • Город:Гродно


Отправлено 09 декабря 2011 - 14:41

Евгения, я начинающий тестер, но вот по этому пассу в IDE кликает по плюсу и он превращается в крестик.
//a/span[text()='Искусство']/../span[contains(@class,'add')]

WebDriver не позволяет кликать на невидимые элементы
  • 0

#16 nstreltsov

nstreltsov

    Активный участник

  • Members
  • PipPip
  • 116 сообщений
  • ФИО:Стрельцов Николай Игоревич
  • Город:Москва


Отправлено 09 декабря 2011 - 20:26

Ну прям мистика какая-то, может версии селениума у нас разные? у меня 2.13
  • 0

#17 Jenka156

Jenka156

    Активный участник

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 12 декабря 2011 - 05:16

Универсальность этого пути в том, что поменяв текст поиска - 'Искусство' (как в любой строке просто подставить тот тект который Вам надо) Вы можете нажать на тот элемент который необходим в данный момент.


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

Ну прям мистика какая-то, может версии селениума у нас разные? у меня 2.13


у меня 2.14... надо попробовать на 2.13.

nstreltsov, а я бы хотела уточнить, у Вас при нажатии на крестик что происходит? по идее это тег должен удаляться из списка при нажатии. у Вас так?
  • 0

#18 nstreltsov

nstreltsov

    Активный участник

  • Members
  • PipPip
  • 116 сообщений
  • ФИО:Стрельцов Николай Игоревич
  • Город:Москва


Отправлено 12 декабря 2011 - 06:25

nstreltsov, а я бы хотела уточнить, у Вас при нажатии на крестик что происходит? по идее это тег должен удаляться из списка при нажатии. у Вас так?


Да, пропадает из списка и на его место становится новый
  • 0

#19 D2Phoenix

D2Phoenix

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

  • Members
  • PipPipPip
  • 200 сообщений
  • ФИО:Чадюк Вадим
  • Город:Гродно


Отправлено 12 декабря 2011 - 07:17

public void mouseClickTag() {
	JavascriptExecutor js = (JavascriptExecutor) driver;
	js.executeScript(
			"var elements = document.getElementsByClassName('tdtg-removeTag remove');" 
                        + "var evObj = document.createEvent('MouseEvents');"
			+ "evObj.initEvent( 'click', true, false );"
			+ "elements[0].dispatchEvent(evObj);"
                        );

	}
Вот такой костыль работает) Правда только в Firefox)
  • 0

#20 nstreltsov

nstreltsov

    Активный участник

  • Members
  • PipPip
  • 116 сообщений
  • ФИО:Стрельцов Николай Игоревич
  • Город:Москва


Отправлено 12 декабря 2011 - 07:26

ради интереса записал видео, может я не так понял куда надо нажимать
http://clip2net.com/s/1oqKI
  • 0


Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн



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

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

Яндекс.Метрика
Реклама на портале