Как использовать условие If-else в Selenium (Java), чтобы заставить работать условие в блоке else

Я пытаюсь найти элемент в блоке else, если условие в блоке if не работает.

  try
    {
       if (Driver.driver.findElement(By.xpath("//div[@id='Tpay_success']")).isDisplayed())
        {
            System.out.println("Payment is successful");
            Reporter.log("Payment is successful");
        }
        else
        {
            Thread.sleep(2000);
            {
            if (Driver.driver.findElement(By.id("pay_decline")).isEnabled()) 
             {
                System.out.println("pay declined");
                action.moveToElement(By.id("pay_decline")).isEnabled()).click().perform();
                Reporter.log("PAYMENT DECLINED!!");
              }

         }  
    catch(ExceptionInInitializerError ex)
    {
            System.out.println(ex);
    }
  }

Я получаю сообщение об ошибке:

Unable to locate element: {"method":"xpath","selector":"//div[@id='Tpay_succes']"}

Я хочу, чтобы блок else выполнялся, если блок if не выполняется. Любые предложения приветствуются. Спасибо.

Какой у Вас вопрос?

Koray Tugay 10.04.2019 22:35

код трудно читать, учитывая формат/отступ (в конечном итоге часть проблемы, о которой мы не знаем). Пример заключает в скобки ту же строку после else и перед if

user85421 10.04.2019 22:37

@KorayTugay я отредактировал это

Adrija 10.04.2019 22:40

«Я хочу, чтобы блок else выполнялся, если блок if не выполняется». Именно так работает if...else.

Code-Apprentice 10.04.2019 22:50

@Code-Apprentice и он не работает.

Adrija 10.04.2019 22:57

все еще не правильно, скобка в конце секунды if, и вообще закрытие не соответствует открытию, как и отступ

user85421 10.04.2019 23:30
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
0
6
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
if (Driver.driver.findElement(By.xpath("//div[@id='Tpay_success']")).isDisplayed())

Это не работает так, как вы думаете. findElement() выдаст ошибку, если элемент отсутствует в DOM текущей загруженной страницы. Это означает, что isDisplayed() в таком случае вызываться не будет.

Вы можете делать что хотите с try...catch:

  try
    {
       Driver.driver.findElement(By.xpath("//div[@id='Tpay_success']"))
       System.out.println("Payment is successful");
       Reporter.log("Payment is successful");
    } catch(ExceptionInInitializerError ex) {
            Thread.sleep(2000);
            if (Driver.driver.findElement(By.id("pay_decline")).isEnabled()) {
                System.out.println("pay declined");
                action.moveToElement(By.id("pay_decline")).isEnabled()).click().perform();
                Reporter.log("PAYMENT DECLINED!!");
            }
    }

Обратите внимание, что вам следует узнать, как заставить драйвер селена ожидать определенного элемента, а не использовать Thread.sleep().

Спасибо за ответ. Другая проблема, с которой я сталкиваюсь, заключается в том, что к тому времени, когда он достигает блока catch, становится слишком поздно, что означает, что кнопка отправки с div id='Tpay_success' в блоке catch теряется, когда она достигает его. . Есть ли способ сделать это быстрее, я удалил метод Thread.sleep().

Adrija 10.04.2019 23:29

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

user85421 10.04.2019 23:33

Отступ не имеет большого значения в Selenium, но, поскольку я использую Java, по этой причине нужны скобки.

Adrija 10.04.2019 23:35

это не имеет значения и в Java, но важно для легкого чтения/понимания (почти любого языка программирования) - и я сомневаюсь, что в Selenium вам не нужно сопоставлять открывающую и закрывающую скобки; например открытие в конце if, закрытие на том же уровне отступа, что и catch (который сам по себе не закрывается)

user85421 10.04.2019 23:36

Да, Селену ничего подобного не нужно, и я исправил.

Adrija 10.04.2019 23:51

@CarlosHeuberger Этот отступ в этом ответе представляет собой гибрид между копированием / вставкой из OP и моим редактированием, включая ошибочную отсутствующую закрывающую скобку.

Code-Apprentice 10.04.2019 23:52

Другие вопросы по теме