Перегрузка/переопределение методов в Java

Есть такой кусок кода :

public void testNForm(WebElement one, WebElement two, WebElement button, WebElement acceptInf){
        setElementText(one);
        sendAndAssertNegativeTest(button, acceptInf);
        one.clear();
        setElementText(one);
        setElementText(two);
        sendAndAssertNegativeTest(button, acceptInf);
    }
       public void sendAndAssertNegativeTest(WebElement button, WebElement acceptInf) {
        wait.until(ExpectedConditions.elementToBeClickable(button));
        for(int i=1; i<5; i++) {
            clickOnElement(button);
        }
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println();
        Assert.assertTrue(!acceptInf.isDisplayed(), "\n" + "Negative test # " + countNF + " is failed - form sent");
        System.out.println("Negative test # " + countNF + " is passed");
        countNF++;
    }

    public void sendAndAssertNegativeTest(WebElement button, String acceptInf) {
        wait.until(ExpectedConditions.elementToBeClickable(button));
        for(int i=1; i<5; i++) {
            clickOnElement(button);
        }
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println();
        Assert.assertNotEquals(driver.getCurrentUrl(),acceptInf, "\n" + "Negative test # " + countNF + " is failed - form sent");
        System.out.println("Negative test # " + countNF + " is passed");
        countNF++;
    }

Нужно перегрузить метод testNForm так , чтоб он вместо последнего аргумента WebElement acceptInf принимал на себя String с таким же названием. При условии что будет стринг должен вызываться второй метод , с проверкой url .
Можно сделать простой копипастой но это не правильно я считаю

А что Вас смущает и где будет копипаста? Кстати, она уже в методах sendAndAssertNegativeTest имеется. Перегрузить метод testNForm, тогда будет два метода с разными сигнатурами. Или применить generics (Generic Methods (The Java™ Tutorials > Learning the Java Language > Generics (Updated))), только зачем?

Хорошо , давайте допустим что мне нужно написать подобные методы , только для других форм (3,4,5… полей для ввода) . С каждым дополнительным полем метод нужно дополнять к предыдущему + дублировать в случае , если последний аргумент это String

Можно page object и код теста в студию? Похоже я не осознаю всю глубину глубин :slight_smile:

Принцип такой :
Класс negative testing расширяет базовый класс (в котором прописаны все рутинные экшены)
В классе negative testing реализованы методы для негативного тестирования форм с разным количеством полей.
После отправки сообщения может быть два варианта - либо выпадает поп-ап об успешной отправке , либо нас перебрасывает на другую страницу с сообщением.
Для этих двух случаев реализовано два метода sendAndAssertNegativeTest - в первом методе мы проверяем , не выпал ли нам поп ап (последний аргумент WebElement) , в втором методе мы проверяем , не поменялась ли ссылка после отправки (Последний аргумент String).
Дело в том , что мне нужно расписать методы testNForm, с наименьшим количеством копипасты.
Как это можно реализовать ?

Нууу, пускай тогда метод всегда проверяет УРЛ. Или всегда проверяет веб-элемент (наличие или отстутсвие). Зачем делать один метод, который будет делать все подряд. Или можно переписать методы, и более крупные методы отвечающие за проверки, будут использовать функцональность более мелких. Может методы, которые будут иметь меньшую функциональность стоит сделать приватными. Что если пойти с этой стороны?

Можно сделать:
public void testNForm(WebElement one, WebElement two, WebElement button, Object acceptInf){
if (acceptInf instanceof WebElement){
} else if(acceptInf instanceof String){
} else{}

Но так делать плохо. Как впрочем и sleep и наследование теста от pageobject )

1 лайк

Нет , только одно чтото проверять не вариант , т.к. если поп-ап - урл не меняется , если переход на новую страницу - не видно нужного сообещния в доме , следственно NoSuchElementExсeption

Этот вариант я и хотел ! Но не знал как вопрос оформить )
В данном случае ну никак не заменить слип , а в наследовании что плохого то ?

Там вроде не тест наследуется, а проверки засунуты в pageobject.

Но ведь результат ожидаем заранее. Результат будет получен исходя из введенных данных. Или мы вводим данные, а результат хз какой и мы хотим проверить все возможные варианты?

всегда есть способ не применять слип, только это конечно будет больше кода, иногда намного больше )
наследование плохо т.к. создается жесткая связь тест - страница, в этом случае лучше например аггрегация

тут похоже как раз последний вариант. И конечно это тоже плохо )

Хм, разве я агитирую создавать такой вот killer-метод? ))

Всмысле заранее ?
Мы заполняем данные (наполовину/некорректные) и пытаемся их отправить , а потом ожидаем , не пришло ли нам подтверждение

А как тогда избежать наследования ?
Создать просто обьект ?

[quote=“Vladyslav_Stuparenko, post:15, topic:8039, full:true”]
Мы заполняем данные (наполовину/некорректные) и пытаемся их отправить , а потом ожидаем , не пришло ли нам подтверждение
[/quote] проблема в том, что мы пытаемся сделать один метод, который будет проверять два варианта: успех и неудачу. Но мы можем перед выполнением теста предсказать желаемый результат. То есть если мы введем некорректные данные в поля, то мы ожидаем увидеть сообщение об ошибке (или что-то там еще).

Проблема в том, что мы хотим метод, который отвечает за слишком много вещей.

можно сделать метод с не ограниченным кол-вом параметров

public void testNForm(WebElement acceptInf, WebElement… elements)

и в цикле foreach / for вызывать setElementText(element)

google:
java неограниченное количество параметров

1 лайк