Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Выпадающее меню и сравнене текста

internet-explorer
webdriver
Теги: #<Tag:0x00007f7b650a6030> #<Tag:0x00007f7b650a59a0>

(Denis Vovchenko) #1

Есть выпадающее меню.В нем есть три значения. Проблемма в том, что при прохождение тестов в хроме, при входе на страницу по дефолту выдает запись №1, а в Эксплорере запись №2.

Мне нужно перед основными шагами проверить текст, если запись №1, то проходить тесты дальше, если другое(№2 или №3) изменить(вот код изменения, к примеру
driver.findElement(By.xpath(".//div[2]/div/div/div/div/div/ul[1]/li")).click(); - нажатие на это меню
driver.findElement(By.xpath("//div/div/div/div/ul[1]/li/ul/li[2]/a")).click();) - выбор значения №1 )
на №1 и после этого идти по основным шагам

Застрял на этом, за ранее, благодарю за помощь.


(Максим Малунов) #2
if(isChrome()){

     // to do 
    }
     else if
    
    isChrome(){

   взять оттуда где вы выбираете на каком движке ехать будем .    
}

или проверяйте driver.findElements(By.xpath(".//div[2]/div/div/div/div/div/ul[1]/li")).size > 0


(Keiga) #3

Я бы предложил сначала оптимизировать локаторы у элементов, чтобы не было “ехал div через div и div’ом погоняет”, наверняка меню это какой то блок и пункты в этом меню обладают какими-то атрибутами за которые можно зацепиться.

Если нужно взять и проверить текст тогда:
driver.findElement().getText();
после чего проверяем его через .equals() например.


(Denis Vovchenko) #5

Я так понял driver.findElements(By.xpath(".//div[2]/div/div/div/div/div/ul[1]/li")).size > 0 - это проверка если в этом меню по дефолту пусто!?


(Denis Vovchenko) #6

Это понятно. Вопрос не в том, как просто вытянуть и сравнить. Вопрос в то, как правильно реализовать “если”, если значение равно
if (значение стоит 1) {тогда исполнять эти действия} иначе {ничего не делать}
Такой должен быть алгоритм,


(Keiga) #7
if (driver.findElement(<locator>).getText().equals("1"))
{
driver.findElement(<locator>).click();
driver.findElement(<locator>).click();
} else { //nothing }

(mipan) #8

Если вам всегда нужен пункт 1, то всегда его и выбирайте, без разбора стоит он там уже или нет.
Из описания это никак не влияет на логику самого теста.


(Максим Малунов) #9
driver.findElement().getText();

нет элемента - здраствуй exception .


(Keiga) #10

Так автор спросил как ему проверить текст в элементе. Нет элемента - нет текста - нет работающего теста.


(Denis Vovchenko) #11

При исполнение выходит на else, может не достает до текста?
Вот HTML:
div class=“nav-collapse collapse”
ul class=“nav”
li class=“dropdown”
a class=“dropdown-toggle” href=“javascript:;” data-toggle=“dropdown”
i/
Администрирование
span class=“caret”/></a

Пишу By.xpath(“локатор до /a”).equals(“Администрирование”)


(Denis Vovchenko) #12

Там элемент 100%стоит(Пусто быть не может).Просто рандомно разные кидает туда. Собственно и для этого мне нужна проверка, какой именно элемент стоит, и что при этом делать.


(Keiga) #13

Сделайте getText() в консоль и посмотреть докуда “достает” и вообще что “достает”.


(Denis Vovchenko) #14

При исполнение driver.findElement(By.xpath(".//div[2]/div/div/div/div/div/ul[1]/li/a")).getText() и вивода в терминал, выдает “Бизнес администрирование”, но при исполнене нижеуказаного кода

if ((driver.findElement(By.xpath(".//div[2]/div/div/div/div/div/ul[1]/li/a")).getText())!=“Бизнес администрирование”)
{
driver.findElement(By.xpath(".//div[2]/div/div/div/div/div/ul[1]/li/a")).click();
driver.findElement(By.xpath("//div/div/div/div/ul[1]/li/ul/li[3]/a")).click();
} else {}

Даже когда в поле стоит “Бизнес администрирование” он пытается его менять на
“Бизнес администрирование”
driver.findElement(By.xpath(".//div[2]/div/div/div/div/div/ul[1]/li/a")).click();
driver.findElement(By.xpath("//div/div/div/div/ul[1]/li/ul/li[3]/a")).click();
, а по задумке должно падать на else


(Keiga) #15

Текст надо сравнивать через .equals()

.getText().equals("Бизнес администрирование")


(Sergey Korol) #16
  1. Вы код когда научитесь форматировать? Подобные посты будут скрываться / удаляться в будущем.
  2. Читаем правила сравнения строк в Java.

(Максим Малунов) #17
  1. Перед этим влепить задержку . Thread.sleep(200)
    и посмотреть возможно тег уже есть а текста внутри еще нет

    if ((driver.findElement(By.xpath(".//div[2]/div/div/div/div/div/ul[1]/li/a")).getText())!=“Бизнес администрирование”)
    {
    driver.findElement(By.xpath(".//div[2]/div/div/div/div/div/ul[1]/li/a")).click();
    driver.findElement(By.xpath("//div/div/div/div/ul[1]/li/ul/li[3]/a")).click();
    }

  2. попробывать поменять driver.findElement(By.linkText()

  3. Посмотреть пробелы text() сносит все пробелы впереди и сзади текста .

  4. заменить != на equvals

p/s за такие xpath вас когда-нибудь побьют :smiling_imp:


(5am) #18

это типа нормальное поведение продукта ?


(Denis Vovchenko) #20

Каков HTML , таков и xPath все ID динамические, по
атрибутам тяжело добраться(все каряво генерируются).Если делать короче
пути, находит больше чем один элемент(что не есть хорошо)


(Denis Vovchenko) #21

Да это логика такая. Может я не понятно сформулировал.
Функция напоминает выпадающее меню выбора языка(что-то 100% стоит по дефолту).


(5am) #22

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