Установите другое время ожидания для конкретной строки в коде - PullRequest
1 голос
/ 23 октября 2019

Я автоматизирую операцию по загрузке денег на Android, используя appium, java, JUnit и проект maven. И чтобы обработать исключение тайм-аута, у меня есть емкость ожидания, подобная этой:

wait = new WebDriverWait(driver, 15);

И я обычно пишу такие строки: wait.until(ExpectedConditions.elementToBeClickable(By.id("login_btn"))).click();

ThisПодход работает просто отлично, за исключением одной строки. Я хочу, чтобы мой код ожидал около 60 секунд для конкретной строки. Поскольку загрузка этой страницы занимает около 60 секунд.

    public void loadMoney() {

        successfulLogIn();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("loadBtn"))).click();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("currencyEur"))).click();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("activityLoadMoney_textView_cardLastFourDigit"))).click();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("rowYourCards_card_container"))).click();
        wait.until(ExpectedConditions.elementToBeClickable(By.id("moneyInputLayout_editText_mainCurrencyAmount"))).sendKeys(loadMoneyAmount);
        wait.until(ExpectedConditions.elementToBeClickable(By.id("activityLoadMoney_textView_loadMoney"))).click();
        wait.until(ExpectedConditions.presenceOfElementLocated(By.id("successtext")));
        MobileElement result = driver.findElement(By.id("successtext"));
        Assert.assertEquals((result.getText()), "Successfully sent!");
    }

В приведенном выше коде я хочу, чтобы мой код ожидал около 60 секунд для этой строки

wait.until(ExpectedConditions.presenceOfElementLocated(By.id("successtext")));

потому что для отображения этого текста требуется около 60 секунд. И, как я упоминал выше, мое время ожидания установлено на 15 секунд. Поэтому я получаю TimeoutException. Я не хочу менять все время ожидания на 60 секунд, потому что это займет слишком много времени для других методов. Я просто хочу, чтобы мой код ждал 60 секунд специально только для этой строки. Как я могу это сделать? Мне нужно написать новый метод для этого? Если так, то как?

1 Ответ

1 голос
/ 23 октября 2019

Вы можете сделать как

WebDriverWait wait = new WebDriverWait(driver,10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("activityLoadMoney_textView_loadMoney"))).click();

wait.wait(60);  // you need to add this line

wait.until(ExpectedConditions.presenceOfElementLocated(By.id("successtext")))

Таким образом, вам не нужно создавать еще один объект WebDriverWait

Примечание: вам снова нужно изменить время ожидания на 10, еслиследующий элемент ожидает только 10 секунд, так как после wait.wait(60); время ожидания водителя установлено на 60, а не на 10

...