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

Фотография

Нажатие на динамически создаваемые элементы


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

#1 super_perec2000

super_perec2000

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Дуров Михаил Петрович

Отправлено 22 августа 2015 - 18:17

Всем привет! Как произвести нажатие на динамически создаваемые элементы, которые не отображаются в исходном коде страницы? Конкретный пример для наглядности, Вбиваем Location  в поиске людей на фейсбуке - далее открывается выпадающий список, на который нужно нажать. Проблема в том, что посмотреть исходный код элемента нельзя.  Так вот, как кликнуть на выпадающий список? https://gyazo.com/15...8e36d5f0284d50 

 

WebDriver Selenium 2.0 + Junit

 


  • 0

#2 super_perec2000

super_perec2000

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

  • Members
  • Pip
  • 5 сообщений
  • ФИО:Дуров Михаил Петрович

Отправлено 23 августа 2015 - 08:01

Вот этот выпадающий список: https://gyazo.com/c6...58b10dc9d78d302


  • 0

#3 aksas

aksas

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

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 23 августа 2015 - 12:31

с помощью инструментов разработчика вполне можно посмотреть код этого меню (в фф Ctrl+Shift+i)

Селектор для пунктов меню будет примерно такой .uiContextualTypeaheadView > li


  • 0

#4 qaomega

qaomega

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Кулакова Дарья Михайловна

Отправлено 26 августа 2015 - 11:55

с помощью инструментов разработчика вполне можно посмотреть код этого меню (в фф Ctrl+Shift+i)

Селектор для пунктов меню будет примерно такой .uiContextualTypeaheadView > li

А вот и нет. Попробуйте, пожалуйста сами зайти в фейсбук и "найти человека". В инструменте разработчика данный выпадающий список не отображается, или я чего-то не понимаю


  • 0

#5 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 26 августа 2015 - 12:14

 

с помощью инструментов разработчика вполне можно посмотреть код этого меню (в фф Ctrl+Shift+i)

Селектор для пунктов меню будет примерно такой .uiContextualTypeaheadView > li

А вот и нет. Попробуйте, пожалуйста сами зайти в фейсбук и "найти человека". В инструменте разработчика данный выпадающий список не отображается, или я чего-то не понимаю

 

Не понимаете. Нажмите ПКМ на любом элементе выпадающего списка. И "Посмотреть код элемента". В Хроме у меня получилось


  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#6 aksas

aksas

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

  • Members
  • PipPip
  • 130 сообщений
  • Город:Харьков

Отправлено 27 августа 2015 - 09:08

 

А вот и нет

специально сделал для вас скриншот

Прикрепленный файл  1.jpg   122,89К   2 Количество загрузок:


  • 0

#7 BabyRoot

BabyRoot

    Специалист

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


Отправлено 27 августа 2015 - 10:32

Ты зачем споришь?

Прикрепленный файл  2015-08-27 13-30-19 Скриншот экрана.png   113,89К   0 Количество загрузок:


  • 0

#8 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 27 августа 2015 - 13:09

 

 

А вот и нет

специально сделал для вас скриншот

attachicon.gif1.jpg

 

//div[@class='bucketed']

содержит элементы, у Вас он не раскрыт.

Возможно, что-то сорвалось, попробуйте ещё раз (в смысле, "Нажмите ПКМ на любом элементе выпадающего списка. И "Посмотреть код элемента"©)

Кстати, у Вас возникнет вопрос, как их потом искать в тесте - есть соседняя тема с данным обсуждением. Но это так, на будущее.


  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#9 qaomega

qaomega

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Кулакова Дарья Михайловна

Отправлено 27 августа 2015 - 13:33

Народ! Простите, но вы не тот комбобокс смотрите, нужен не тот где люди http://joxi.ru/Y2LXMpgh53x926 а тот где "Location"  https://gyazo.com/c6cc023ab6f73363d58b10dc9d78d302  Там " ПКМ на любом элементе выпадающего списка" не рабоатет

 


  • 0

#10 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 27 августа 2015 - 13:41

Действительно беда-печалька. Спасибо за задачку)


  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#11 BabyRoot

BabyRoot

    Специалист

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


Отправлено 27 августа 2015 - 13:46

#globalContainer div[class='uiContextualLayerPositioner uiLayer'] ul[role='listbox'] и тут элементы li


  • 0

#12 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 27 августа 2015 - 15:34

#globalContainer div[class='uiContextualLayerPositioner uiLayer'] ul[role='listbox'] и тут элементы li

помогло, спасибо :)

            var input =
                Driver.FindElement(
                    By.XPath("//span[@placeholder='Введите название города или региона.']/label/input"));
            input.Click();
            input.SendKeys(someText);
            Thread.Sleep(1000); //для ожидания отображения списка
            var li = Driver.FindElements(By.XPath("//div[@class='uiContextualLayerPositioner uiLayer']/descendant::li")); //элементы списка

  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#13 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 28 августа 2015 - 07:02

@BabyRoot, а как Вы нашли это? интересен механизм поиска...


  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#14 qaomega

qaomega

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Кулакова Дарья Михайловна

Отправлено 28 августа 2015 - 07:22

У меня что то не так, использую junit.

 driver.findElement(By.cssSelector("div._41dc:nth-child(3) > span:nth-child(2) > label:nth-child(1) > input:nth-child(1)")).clear();
    driver.findElement(By.cssSelector("div._41dc:nth-child(3) > span:nth-child(2) > label:nth-child(1) > input:nth-child(1)")).sendKeys("Мюнхен");
    Thread.sleep(3000);
    List<WebElement> l = driver.findElements(By.xpath("//div[@class='uiContextualLayerPositioner uiLayer']/descendant::li"));
    driver.findElement(By.xpath(l.get(0).toString())).click();

Ошибка на строчке driver.findElement(By.xpath(l.get(0).toString())).click(); : http://joxi.ru/zANDJpEhkBXgm9

 

Если сделать вот так:

 for(int i =0; i<l.size();i++)
    {
   	System.out.println(l.get(i).toString());
   }

То вывод:

[[FirefoxDriver: firefox on LINUX (9e8d55ca-c8b5-4f24-b96a-ea3959f06b62)] -> xpath: //div[@class='uiContextualLayerPositioner uiLayer']/descendant::li]
[[FirefoxDriver: firefox on LINUX (9e8d55ca-c8b5-4f24-b96a-ea3959f06b62)] -> xpath: //div[@class='uiContextualLayerPositioner uiLayer']/descendant::li]
[[FirefoxDriver: firefox on LINUX (9e8d55ca-c8b5-4f24-b96a-ea3959f06b62)] -> xpath: //div[@class='uiContextualLayerPositioner uiLayer']/descendant::li]

  • 0

#15 elvis

elvis

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

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 28 августа 2015 - 07:35

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


  • 0

#16 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 28 августа 2015 - 07:48

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

Гениальнейшая фраза. Если случай простейший - подскажите решение.
 
@qaomega: Find Elements возвращает ReadOnlyCollection of IWebElement
Попробуйте добавить .ToList()
и в дебаге посмотрите содержимое этого листа, от этого пляшите дальше.
  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#17 BabyRoot

BabyRoot

    Специалист

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


Отправлено 28 августа 2015 - 07:59

Вернёмся к первоначальной задаче.

1. Вводим текст в поле.

2. Ожидаем появления элемента "#globalContainer div[class='uiContextualLayerPositioner uiLayer'] ul[role='listbox']"  (для быстроты можно поставить слип, но это не кошерно же)

3. Элемент найден (findElement), ищем в нём все элементы "li" (findElements).

4. Получаем List c нужными  элементами выпадающего списка.

5. Выбираем в этом Листе ( гет по номеру ) нужный элемент (например, 0).

6. Кликаем по нему.

 

 

Как искал.

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


  • 0

#18 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 28 августа 2015 - 08:04

Вернёмся к первоначальной задаче.
1. Вводим текст в поле.
2. Ожидаем появления элемента "#globalContainer div[class='uiContextualLayerPositioner uiLayer'] ul[role='listbox']"  (для быстроты можно поставить слип, но это не кошерно же)
3. Элемент найден (findElement), ищем в нём все элементы "li" (findElements).
4. Получаем List c нужными  элементами выпадающего списка.
5. Выбираем в этом Листе ( гет по номеру ) нужный элемент (например, 0).
6. Кликаем по нему.
 
 
Как искал.
В старой опере, в Драгонфлае этот элемент сразу нашелся, быстро составил локатор, а вот в фаербаге уже находился с трудом, там почти не получается поймать.


Ну, в своём коде я сделал п.п.1,3,4, так что мнения сошлись.

По поводу поиска - старой оперы, к сожалению, у меня нет :( работаю с хромом, там без Вашей подсказки не разобрался бы :(
  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©


#19 elvis

elvis

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

  • Members
  • PipPipPip
  • 189 сообщений
  • Город:Tallinn


Отправлено 28 августа 2015 - 08:55

Было бы слишком просто. Чтобы научиться надо самому пощупать ручками, да ведь? В хроме нужно научиться использовать дебагер и ставить брейк поинты. Тогда список не будет скрываться и вы сможете прощупать его содержимое с помощью инспектора. Ну примерно так вот пощупайте:

https://dropmefiles.com/6nLC8


  • 1

#20 vkazar

vkazar

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

  • Members
  • PipPip
  • 128 сообщений
  • ФИО:Виктор
  • Город:Москва

Отправлено 28 августа 2015 - 09:59

Было бы слишком просто. Чтобы научиться надо самому пощупать ручками, да ведь? В хроме нужно научиться использовать дебагер и ставить брейк поинты. Тогда список не будет скрываться и вы сможете прощупать его содержимое с помощью инспектора. Ну примерно так вот пощупайте:

https://dropmefiles.com/6nLC8

Ваше высокомерие удивляет.
Я попробовал, не получилось. Ещё попробовал, снова не получилось. Спасибо BabyRoot'у, подсказал в каком направлении идти. Нашёл решение.
Если бы учиться было бы не интересно - я бы не спрашивал у него путь нахождения той самой строчки, после которой дело сдвинулось с мёртвой точки.
Раз Вы такой умный - предложите альтернативное решение проблемы. С самого начала. А лучше - действительно, предложите инструменты решения.
Кстати да, видео не показывает, так что...


  • 0

Тестировщик должен быть умнее программиста... ну, по крайней мере, хитрее. ©



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

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