Selenium: Как прекратить выполнение шагов подзапроса в методе @Test после перехвата исключения с использованием TestNG Listener? - PullRequest
0 голосов
/ 01 июня 2018

Я работаю над PageFactory в Page Object Model и средой TestNG для автоматизации.Я использую beforeFindBy метод в WebDriverEventListener, чтобы прослушать наличие элемента.Когда элемент отсутствует, выдается NoSuchElementException, и я ловлю исключение, используя блок try-catch.Как прекратить выполнение оставшихся шагов в методе @Test.Я не хочу использовать try-catch в моем методе @Test.Любое предложение об изменениях в моем дизайне наиболее ценится.Ниже мой дизайн.

LoginPage

    public class LoginPage {

        @FindBy(xpath = "//img[@src='/webres_5786257bd7c8a5.72130757/themes/default/images/login/logo.png']")
        WebElement loginLogo;

        public LoginPage(WebDriver driver, ExtentTest test) {
            this.driver = driver;
            PageFactory.initElements(driver, this);
            this.test = test;
        }

        public void verifyLoginPageLogo() throws IOException {
            Assert.assertTrue(loginLogo.isDisplayed());
            test.log(LogStatus.PASS, "Logo is displayed", takeScreenshot(driver, test));
        }
}

Слушатель

public class CustomListeners extends TestListenerAdapter implements WebDriverEventListener {

    //All Implemented Methods

    public void beforeFindBy(By by, WebElement element, WebDriver driver) {
        try {
            driver.findElement(by);
        } catch (NoSuchElementException e) {
            System.out.println("Element " + by + "not found");
        }
    }
}

Тестовый класс

@Listeners(CustomListeners.class)
public class Test1 extends BaseTestSuite {

    LoginPage lp;
    TabMenu tm;

    @Test(priority = 0, testName = "Verify Login")
    public void login() throws Exception {
        lp = new LoginPage(driver, test);
        tm = new TabMenu(driver, test);
        driver.get(Constants.url);
        lp.verifyLoginPageLogo();  //Element not present here
        lp.setUserName("dmin");
        lp.setPassword("admin");
        lp.clickLoginBtn();
        tm.verifyTabMenu();
        tm.isCurrentTab("Dashboard");
    }
}

1 Ответ

0 голосов
/ 01 июня 2018

Логин PageObject в идеале не должен содержать код подтверждения.Этот код должен быть в вашем тестовом классе.Кроме того, функциональность Extent также должна быть в классе тестирования, а не PageObject.

. Нет необходимости в testng listener или webdrivereventlistener.В PageObject if реструктурируйте метод verifyLoginPageLogo () ниже -

public boolean isLoginPageLogoDisplayed() throws IOException {
            //Write logic to check if element is displayed.    
            //Return false in case of exception etc
        }

В тестовом классе сделайте это -

Assert.assertTrue(lp.isLoginPageLogoDisplayed());

Если выдается ArrertionError, остальные шаги пропускаютсяавтоматически.

Также рассмотрим создание BasePageObject, в котором есть служебные методы для проверки присутствия, отображения, поиска элементов и т. Д. И т. Д. Просто расширьте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...