операторы if-else не работают должным образом для Java-кода Appium - PullRequest
0 голосов
/ 31 мая 2018

Я написал код Java с операторами if-else, и пользователь перешел бы с 'Screen1' на 'Screen2' по любому из 4 альтернативных маршрутов, и я приложил изображение для всех enter image description here возможныхпотоки приложений, которые решаются на ходу, конечно, код, написанный разработчиком.Просто для добавления инструмента используется Appium.

    driver.findElement(By.id("----")).click(); //this click will take from  'screen1' to next screen.
          if(driver.findElement(By.id("com.abc.rbanking:id/WhatsNew")).isDisplayed())
    { //case if screen A is displayed just after screen 1
        MobileElement cross = driver.findElement(By.xpath("//*[@class = 'android.widget.ImageView']"));
        cross.click();

        Thread.sleep(3000);

    }

    if(driver.findElement(By.xpath("//android.widget.TextView[@resource-id='com.abc.rbanking:id/text_logo'][text()='Security Question']")).isDisplayed())
    { //case when screen B is displayed Just after screen 1

    MobileElement mfaQ = driver.findElement(By.id("com.abc.rbanking:id/MfaQuestionText"));
    String question = mfaQ.getText();

    String lastword = question.replaceAll("^.*?(\\w+)\\W*$", "$1");

    System.out.println(lastword);

    MobileElement answer = driver.findElement(By.id("com.abc.rbanking:id/MfaAnswerTextBox"));

    answer.sendKeys(lastword);

    MobileElement checkbox = driver.findElement(By.id("com.abc.rbanking:id/ShowChallengeAnswerCheckbox"));
    checkbox.click();

    Thread.sleep(3000);

    MobileElement nextb = driver.findElement(By.id("com.abc.rbanking:id/PrimaryButton"));
    nextb.click();

    Thread.sleep(8000);
    }

    if(driver.findElement(By.id("com.abc.rbanking:id/WhatsNew")).isDisplayed())
    { //case when screen A is displayed after screen B
        MobileElement cross = driver.findElement(By.xpath("//*[@class = 'android.widget.ImageView']"));
        cross.click();
        Thread.sleep(3000);
    }


         driver.findElement(By.id("----")); //this is code for 'Screen 2'

Что происходит во время выполнения скрипта, сначала проверяется «If», а остальной код пропускается.Я не могу понять проблему.Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Наконец-то я смог найти решение проблемы, и она работает нормально.Я помещаю оператор if в блок try-catch, как показано в приведенном ниже коде, и он прекрасно работает для каждой альтернативы, предоставляемой приложением конечному пользователю.

try {
            if (driver.findElement(By.xpath("//android.widget.TextView[@resource-id='com.abc.rbanking:id/text_logo'][text()='Security Question']")).isDisplayed()) { //case when screen B is displayed Just after screen 1
                MobileElement mfaQ = driver.findElement(By.id("com.abc.rbanking:id/MfaQuestionText"));
                String question = mfaQ.getText();
                String lastword = question.replaceAll("^.*?(\\w+)\\W*$", "$1");
                System.out.println(lastword);
                MobileElement answer = driver.findElement(By.id("com.abc.rbanking:id/MfaAnswerTextBox"));
                answer.sendKeys(lastword);
                MobileElement checkbox = driver.findElement(By.id("com.abc.rbanking:id/ShowChallengeAnswerCheckbox"));
                checkbox.click();
                Thread.sleep(3000);
                MobileElement nextb = driver.findElement(By.id("com.abc.rbanking:id/PrimaryButton"));
                nextb.click();
                Thread.sleep(8000);
            }
        } catch (
                Exception e) {
            e.printStackTrace();
        }
        try

        {
            if (driver.findElement(By.id("com.abc.rbanking:id/WhatsNew")).isDisplayed()) { //case when screen A is displayed after screen B
                MobileElement cross = driver.findElement(By.xpath("//*[@class = 'android.widget.ImageView']"));
                cross.click();
                Thread.sleep(3000);
            }
        } catch (
                Exception e)

        {
            e.printStackTrace();
        }
    }
0 голосов
/ 31 мая 2018

Здесь звучит так, как будто (без каламбура) вы на самом деле не хотите создать if else.Поэтому попробуйте просто использовать отдельные операторы if:

// see if element on 'screen A' is displayed
if (driver.findElement(By.id("abc")).isDisplayed()) {
    //execute a few statements

}

// see if element on 'Screen B' is displayed
if (driver.findElement(By.id("xyz")).isDisplayed()) {

   // execute a few statements
}

// see if element on 'screen A' is displayed
if (driver.findElement(By.id("abc")).isDisplayed()) {

}
driver.findElement(By.id("----")); //this is code for 'Screen 2'

Поведение, которое вы описываете, а именно, с первым нажатием if и выполнением ничего, именно так и должен вести себя ваш код.Если вы намереваетесь разрешить выполнение каждого блока кода, то, что я дал выше, является одним из вариантов.

...