попробуй поймай до успеха ява - PullRequest
0 голосов
/ 12 декабря 2018

Я получаю исключение для ссылки на устаревший элемент. Если я могу щелкнуть один раз.Я хочу нажимать на элемент до тех пор, пока или 5 раз не найдем объект.

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

Метод клика:

public void click1(WebDriver driver, WebElement element, String name) {    
    int attempts = 0;
    while(attempts < 5) {
        try {
            element.click();
            Add_Log.info("Successfully clicked on  " + name);
            Reporter.log("Successfully clicked on " + name);
            break;
        } catch (Exception e) {
            try {
                JavascriptExecutor executor = (JavascriptExecutor) driver;
                executor.executeScript("arguments[0].click();", element);
                Add_Log.info("Successfully clicked on  " + name);
                Reporter.log("Successfully clicked on " + name);
                break;
            } catch (Exception e2) {
                Add_Log.info("Not able to click " + name);
                Reporter.log("Not able to click " + name);
                TestResultStatus.Testfail = true;
                Assert.fail();
            }
        }
        attempts++;
    }
}

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Я бы написал так, как показано ниже.Вы пытаетесь сделать обычный щелчок 5 раз с короткой паузой между попытками.Если выдается исключение, оно съедается и делается другая попытка.Если ни один из этих 5 не успешен, вы делаете одну попытку щелкнуть по нему с помощью JS.Если это не помогло, то произошел сбой журнала и т. Д.

public void click1(WebDriver driver, WebElement element, String name) {    
    int attempts = 0;
    while(attempts < 5) {
        try {
            element.click();
            Add_Log.info("Successfully clicked on " + name);
            Reporter.log("Successfully clicked on " + name);
            return;
        } catch (Exception e) {
        }
        attempts++;
        Thread.Sleep(500); // brief pause between attempts
    }

    try {
        JavascriptExecutor executor = (JavascriptExecutor) driver;
        executor.executeScript("arguments[0].click();", element);
        Add_Log.info("Successfully clicked on " + name);
        Reporter.log("Successfully clicked on " + name);
        return;
    } catch (Exception e2) {
        Add_Log.info("Not able to click " + name);
        Reporter.log("Not able to click " + name);
        TestResultStatus.Testfail = true;
        Assert.fail("Not able to click " + name);
    }
}

ПРИМЕЧАНИЕ. Вероятно, было бы лучше подождать, пока элемент станет активным, прежде чем пытаться щелкнуть по нему.Это, вероятно, исправит большинство ваших проблем.У вас все еще может быть проблема с некоторым диалогом / баннером / вращающимся элементом, перекрывающим элемент, с которым вам нужно будет иметь дело, хотя ... и вы можете справиться с этим с помощью 5 попыток кликов и т. Д.

0 голосов
/ 12 декабря 2018

Это на самом деле так же просто, как изменить условие цикла с attempts < 5 на true и удалить строку attempts++;.По крайней мере, это я понял из твоего вопроса.Если это не то, что вы ищете, попробуйте перефразировать вопрос более четко.

...