How can I use @BeforeTest for Capabilities class / or correctly extends on each @Test

java
selenium
testng
appium
Теги: #<Tag:0x00007f7b65645888> #<Tag:0x00007f7b656455b8> #<Tag:0x00007f7b656453b0> #<Tag:0x00007f7b656451f8>

(Dima Matiushenko) #1

https://pastebin.com/BUXUbBE5 - вот класс в котором прописаны Capabilities

https://pastebin.com/CWfmJ7Tn - вот любой тест . в котором наследуется класс в котором прописаны Capabilities

По моей задумке , создать один класс в котором прописать в @BeforeTest Capabilities . а ниже просто в @Test вставлять уже тесты.
Без TestNG все работает ,а сделать с TestNG не выходит. Подскажи мб я что то не понял.
спс


(Михаил Братухин) #2

Не догоняю чет вопрос, как без testNG у вас работает? А кто тогда запускает тесты? BeforeTest и Test это ж TestNG’шные аннотации.


(Dima Matiushenko) #3

Нет . я предоставил пример 2-х рабочих классов БЕЗ TestNG
теперь я хочу с класса где прописаны Capabilities закинуть в бифор тест .
1 - я не уверен что так правильно делать
2 - и если это правильный подход как реализовать extends ? в @Tests


(Михаил Братухин) #4

Ну, во-первых наследование менее предпочтительно чем композиция…
Во-вторых имя класса тест в нижнем регистре? :sob:


(Dima Matiushenko) #5

ну для меня чистота кода на данный момент не так важна )
можешь подсказать как решить данную проблему?
я пока дошел только до простой копипасты класса с Capabilities в начало каждого @Test


(Михаил Братухин) #6

Ток из дома уже и после корпоратива :joy:


(Dima Matiushenko) #7

спс ))


(Михаил Братухин) #8

Так и в чем проблема при использовании с TestNG? Не увидел кода с TestNG. Ваш класс “test” с одним статичным методом, по сути обычный утилитный класс получается. Почему выбрали статику для этого метода - Capabilities? (класс в нижнем регистре, а метод в верхнем… :scream:)
Статику можете дергать простым импортом в BeforeTest без всякого наследования. Что вам даст наследование? Начиная с 8-й Java можно использовать интерфейсы с реализацией или статикой: Java 8 Default и Static методы . Но я советую чуть лучше окунуться в нюансы работы статики, наследования и ООП. Всякие принципы типа SOLID погуглить и тому подобное. Очень освежает голову.
Но даже если сделать как вы хотели, то проблемы быть не должно. Обычный статичный метод дергаете в Before-методе и всё. Возможные проблемы могут возникнуть с ресурсами, которые в статике используете.


(Dima Matiushenko) #9

1.“Почему выбрали статику для этого метода - Capabilities?” - просто так в примерах было.

2.“Что вам даст наследование?” - так для практики легче . я для отработки разных жестов просто пишу
пример:
public class guestures extends test {
и это заменяет написание Capabilities каждый раз

  1. “Начиная с 8-й Java можно использовать интерфейсы с реализацией или статикой: Java 8 Default и Static методы . Но я советую чуть лучше окунуться в нюансы работы статики, наследования и ООП. Всякие принципы типа SOLID погуглить и тому подобное” - спасибо !. я учту обязательно. пока только начал и так получилось на нормальное изучение программирования нет времени . Нужно начать писать простые тесты на клики уже скоро.

4.“Так и в чем проблема при использовании с TestNG?” - ну не могу найти реальных кейсов . а только
чет тип такого .
@AfterMethod

public void Reportadding(){

System.out.println(“This block executes after each Test”);
}

@Test

public void OpeningBrowser(){

//This opens the Browser

System.out.println(“Executing Test 2”);
}


Даже на примере с просто @Test не выходит http://prntscr.com/lva2kh
а если в бифор тест . он даже не запускается )


(Михаил Братухин) #10

Программированию можно учиться всю жизнь и не научиться. Практика превыше теории. Свой опыт важнее чужого. Это понятные и простые азы. Но то о чем я писал, кроме SOLID это база языка, это даже не уровень junior разработчика автотестов. У вас в коде используется аннотация, но нет импорта этой зависимости. Об этом ошибка. И таких ошибок будет ещё куча, если не потратите пару недель на самостоятельное изучение базовых понятий. Есть неплохой курс на Stepik’е. И множество других материалов. Если собираетесь разрабатывать, а написание автотестов это разработка, то будьте морально готовы к тому, что придётся много и постоянно учиться и переучиваться. Этот процесс постоянный и непрерывный. Если нет времени на обучение, то вряд ли вы далеко уйдете дальше hello world’ов.

Я понимаю, что вы новичок, учитесь по примерам. Но кроме того, что «так написано в примере» нужно и понимать почему написано так, а не иначе. Разбирать примеры. Для примера почитайте о TestNG тут

https://devcolibri.com/%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-testng-%D0%B2-java/ или самостоятельно поищите, потом попробуйте поиграться с жизненным циклом тестов и т.д.


(Dima Matiushenko) #11

большое спасибо.
обязательно прочту материал и попробую еще раз


(Funker) #12

На github много примеров, посмотрите. Я в свое время неделями репозитории с примеры изучал.

Почитайте еще Java code convention в виде
java cheat sheet, тоже самое для testng или junit
Никогда не называйте класс Test.class


(Fiodar Motin) #13

Пример с TestNG, аннотация @Parameters для testng конфигов (в вашем случае можно без этого).

    public String appName = "com.test.app";
    public AndroidDriver androidDriver;
    private String currentDir = System.getProperty("user.dir");

    public AndroidDriver driverProvider(){
        return (AndroidDriver) WebDriverRunner.getWebDriver();
    }

    @BeforeClass
    @Parameters({"port", "platformName", "deviceName", "VERSION", "remote" ,"apk", "language"})
    public void setUp(String port, String pName, String dName, String version, String remote, String apk, String lang) throws MalformedURLException {
        DesiredCapabilities cap = new DesiredCapabilities();
        cap.setCapability(MobileCapabilityType.VERSION, version);
        cap.setCapability("platformName", pName);
        cap.setCapability("deviceName", dName);
        cap.setCapability("clearSystemFiles",true);
        cap.setCapability("autoGrantPermissions", true);
        cap.setCapability("noSign", true);
        cap.setCapability("app", currentDir+apk);
        cap.setCapability("language",lang);
        cap.setCapability("locale",lang);
        androidDriver = new AndroidDriver(new URL("http://" + remote + ":" + port + "/wd/hub"), cap);
        setWebDriver(androidDriver);
        Configuration.timeout = 10000;
    }

    @Test
    public void connect0(){
        Connect_0  connect_0 = new Connect_0(androidDriver);        
        NavigationService navigationService = new NavigationService();
        navigationService.openScreen("Connect0");
        connect_0.progressBar.shouldBe(visible);
    }

Если надо разделить установку apk и тесты то просто каждый тестовый класс наследуйте от класса там где сетятся капабилити и ставится апкашка.