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

Фотография

Найти элемент на странице и проверить его дочерние элементы, при нужно

Selenium Java

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

#1 hkomrako

hkomrako

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

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Комракова Анна

Отправлено 15 августа 2018 - 12:18

Здравствуйте!

 

Подскажите, пожалуйста, как я могу найти элемент на стр и проверить его дочерние элементы ( проверить что это именно "От" и "грн").

Если совпадают обе проверки , то на этот элемент нужно будет кликнуть, если нет - искать следующий элемент.

 

Пыталась накрутить что то вроде: 

while (driver.findElementByCssSelector("li[class='history-list__item history-item-out-request history-item-incoming']")) {
            if ((driver.findElementByLinkText("Від")) && (driver.findElementByLinkText("грн."))) {
                driver.findElementByClassName("li[class='history-list__item history-item-out-request history-item-incoming']").click();
            }
        } 

но знаний явно не хватило... 

 

Пример кода в котором я ищу элемент в прикрепленном скрине.. 

 

Буду очень признательна за помощь.. Прикрепленный файл  Screenshot_1.jpg   44,35К   0 Количество загрузок:


  • 0

#2 Noksa

Noksa

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

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 15 августа 2018 - 12:58

Ищите все элементы:

var elements = driver.FindElements(By.XPath("li[class='history-list__item history-item-out-request history-item-incoming' and descendant::*[contains(text(), 'Вiд')] and descendant::*[contains(text(), 'грн.')]]"))            

Есть так же более короткий вариант:

var elements = driver.FindElements(By.XPath("li[class='history-list__item history-item-out-request history-item-incoming' and .//*[contains(text(), 'Вiд')] and .//*[contains(text(), 'грн.')]]"))            

Но вообще у вас локатор с классом - ужасный.

 

Далее

elements.ToList().ForEach(w => w.Click());

  • 0

#3 hkomrako

hkomrako

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

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Комракова Анна

Отправлено 15 августа 2018 - 13:32

А что мы объявляем с помощью var elements ? просто это видимо JS, для java это стринговая переменная или WebElement? ..  

 

Вопрос по выражению: *[contains(text(), 'Вiд')] and descendant::*[contains(text(), 'грн.')]]")), для чего скобка после текста? ( 'Вiд'), 'грн.'))

 

И еще, по 

 

 

elements.ToList().ForEach(w => w.Click());

После проверки мне не нужно кликать каждый элемент - достаточно одного, но проверить нужно все.. и ideшка не разрешает ToList().. может я что то не так делаю.. 

 

Но вообще у вас локатор с классом - ужасный.

 

- не без этого)) 


  • 0

#4 Noksa

Noksa

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

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 15 августа 2018 - 15:50

 

 

А что мы объявляем с помощью var elements ? просто это видимо JS, для java это стринговая переменная или WebElement? ..

 

Я привёл пример с C#, но на Java эта переменная с типом List<WebElement> (если мне не изменяет память).

 

 

 

Вопрос по выражению: *[contains(text(), 'Вiд')] and descendant::*[contains(text(), 'грн.')]]")), для чего скобка после текста? ( 'Вiд'), 'грн.'))

 

Ну как зачем - это закрывающая скобка contains. Текст, который ищем - находится между ' '.

В гугле можно поискать - xpath text contains.

 

 

После проверки мне не нужно кликать каждый элемент - достаточно одного, но проверить нужно все.. и ideшка не разрешает ToList().. может я что то не так делаю.. 

 

Ну если не нужно, тогда кликайте по первому.

 

А проверяйте все, например, в цикле.


  • 0

#5 hkomrako

hkomrako

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

  • Members
  • Pip
  • 4 сообщений
  • ФИО:Комракова Анна

Отправлено 16 августа 2018 - 09:43

Спасибо, огромное)


  • 0



Темы с аналогичным тегами Selenium, Java

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

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