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

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

Теги: #<Tag:0x00007f9b080e3030> #<Tag:0x00007f9b080e2f68>

Есть выпадающее меню.В нем есть три значения. Проблемма в том, что при прохождение тестов в хроме, при входе на страницу по дефолту выдает запись №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 и после этого идти по основным шагам

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

if(isChrome()){

     // to do 
    }
     else if
    
    isChrome(){

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

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

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

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

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

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

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

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

driver.findElement().getText();

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

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

При исполнение выходит на 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(“Администрирование”)

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

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

При исполнение 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

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

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

  1. Вы код когда научитесь форматировать? Подобные посты будут скрываться / удаляться в будущем.
  2. Читаем правила сравнения строк в Java.
  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:

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

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

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

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