• Как сделать тесты в тесте?

    @koryapin Автор вопроса
    Короче решилось все просто

    public abstract class BaseUITest1 {
    
        protected static WebDriver driver;
    
        @BeforeAll
        public static void setUp() {
            WebDriverManager.chromedriver().setup();
    
            ChromeOptions options = new ChromeOptions();
            options.addArguments("--disable-notifications");
            options.addArguments("--disable-popup-blocking");
            options.addArguments("--start-maximized");
            options.setPageLoadStrategy(PageLoadStrategy.NORMAL);
    
            driver = new ChromeDriver(options);
    
            driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
            driver.get(BASE_URL);
    
            new AuthorizationPage(driver)
                 .AuthoriseScenario(Configuration.LOGIN, Configuration.PASSWORD)
                 .clickFirstAssistantCard();
        }
    
        @AfterAll
        public static void tearDown() {
            driver.quit();
        }
        
    }


    package Features.Interface;
    
    import Base.BaseUITest;
    import Base.BaseUITest1;
    import Common.Configuration;
    import Pages.AuthorizationPage;
    import Pages.ConductorPage;
    import io.qameta.allure.Feature;
    import io.qameta.allure.Severity;
    import io.qameta.allure.SeverityLevel;
    import org.junit.jupiter.api.*;
    
    @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    @Feature("Conductor")
    
    public class ConductorTest extends BaseUITest1 {
    
    
    
        @Test
        @Order(1)
        @DisplayName("Добавление навыка")
        @Severity(SeverityLevel.CRITICAL)
        public void AddingSkill() {
            new ConductorPage(driver)
                    .hoverMouseSkillsSection()
                    .clickPlusButtonSkill()
                    .clickNameNavElement()
                    .clearNameNavElement()
                    .pause(1)
                    .inputNameNavElement("Навык тест")
                    .pushEnter()
                    .pause(3)
                    .checkAssertSkill();
        }
    
        @Test
        @Order(2)
        @DisplayName("Переименование навыка")
        @Severity(SeverityLevel.TRIVIAL)
        public void RenamingSkill() {
            new ConductorPage(driver)
                    .pushRightMouseButtonExplorer()
                    .clickContextButton2()
                    .inputNewNameElement("Навык тест новый")
                    .pushEnterRename()
                    .pause(3)
                    .checkNewNameSkill();
        }
    }
    Ответ написан
    Комментировать
  • Сложные CSS selector как написать?

    @koryapin Автор вопроса
    Привет.
    Я так и не получил ответа на свой вопрос. Но решение нашел.

    Изначально нужно было написать селектор для класса с несколькими названиями в одном (class="one two 1 2"). Часть такого класса, как правило, меняется. Но первая часть класса, тоже как правило, неизменна.

    Через CSS можно прописать селектор как ".one" и он будет находить все классы, в названии которых есть "one". Но проблема в том если таких классов много и они находятся в разных частях кода, обратиться к через CSS невозможно. Всякие ":nth-child(1)" и ":nth-of-type(2)" не помогут, обязательно найдется к элемент, которого ты не найдешь.

    У Xpath есть крутая штука как "*" ставишь ее и ищешь элементы по всему сайту, но в этом случае нужно 100% совпадение в названии класса.

    И вот решение:
    У Xpath можно создавать селекторы по части названия класса.

    итак, код (пример)
    <div class="one">
              <button class="two true"> // 1 button 
              <button class="two falsh"> // 2 button
              <button class="two falsh"> // 3 button
    <div class="one">
            <button class="two falsh"> // 4 button
            <button class="two true"> // 5 button
            <button class="two true"> // 6 button


    Селекторы для каждой кнопки (button) по первой части названия класса:
    xpath = "(.//*[starts-with(@class, 'two ')])[1]" // 1 button
    xpath = "(.//*[starts-with(@class, 'two ')])[2]" // 2 button
    xpath = "(.//*[starts-with(@class, 'two ')])[3]" // 3 button
    xpath = "(.//*[starts-with(@class, 'two ')])[4]" // 4 button
    xpath = "(.//*[starts-with(@class, 'two ')])[5]" // 5 button
    xpath = "(.//*[starts-with(@class, 'two ')])[6]" // 6 button
    Ответ написан
    Комментировать