Как использовать журналы отчетов об объеме в объектах страницы? - PullRequest
0 голосов
/ 22 апреля 2020

Я получаю исключение пустого указателя при использовании метода test.log () в объектах страницы.

Мой тест отчета по экстентам определен в "@BeforeMethod" в классе TestBase. Следовательно, мне нужно получить доступ к test.log (); в объект страницы, например LoginPage. java. Он отлично работает на уровне тестового примера, т.е. LoginPageTest. java

    @BeforeMethod
    public void beforeMethod(Method method) {
    String testMethodName = method.getName();
    test = extent.createTest(testMethodName);
    String testReslt = method.getName();
    test.info(MarkupHelper.createLabel(testReslt, ExtentColor.BLUE));
    log.info("**************" + method.getName() + "Started***************");
}

public static void logExtentReport(String str) {
    test.log(Status.INFO, str);
}

Ниже находится LoginPage. java (который является классом объекта страницы)

public class LoginPage {

    private WebDriver driver;
    private final Logger log = LoggerHelper.getLogger(LoginPage.class);
    VerificationHelper verificationHelper;

    WaitHelper waitHelper;

    @FindBy(css = "#email")
    WebElement loginEmail;

    @FindBy(css = "#password")
    WebElement loginPassword;

    @FindBy(css = "#loginbutton")
    WebElement loginBtn;

    @FindBy(css = "#loginerrormsg")
    WebElement authenticationFailureMessage;

    @FindBy(css = "#soflow-color")
    WebElement userProfileDrpDwn;

    @FindBy(xpath = "//option[@value='string:logout']")
    WebElement logout;

    @FindBy(tagName = "a")
    List<WebElement> allLinks;

    String urls[] = null;

    public LoginPage(WebDriver driver) {
        this.driver = driver;
        PageFactory.initElements(driver, this);
        waitHelper = new WaitHelper(driver);
        waitHelper.waitForElement(loginBtn, 
    ObjectReader.reader.getExplicitWait());
    }

    public void enterEmailAddress(String emailAddress) {
        log.info("entering email address...." + emailAddress);
        this.loginEmail.clear();
        this.loginEmail.sendKeys(emailAddress);
    }

    public void enterPassword(String password) {
        log.info("entering password...." + password);
        this.loginPassword.clear();
        this.loginPassword.sendKeys(password);
    }

    public ProspectorPage clickOnSubmitButton(String isValidCredentials) {
        log.info("clicking on submit button...");
        loginBtn.click();
        if (isValidCredentials.equalsIgnoreCase("yes")) {
            return new ProspectorPage(driver);
        }
        return null;
    }

    public boolean verifySuccessLoginMsg() {
        return new VerificationHelper(driver).isDisplayed(userProfileDrpDwn);
    }

    public boolean verifyAuthenticationFailureMsg() {
        return new 
    VerificationHelper(driver).isDisplayed(authenticationFailureMessage);
    }

    public void loginToApplication(String emailAddress, String password, 
        String isValidCredentials) {
        enterEmailAddress(emailAddress);
        loginBtn.click();
        enterPassword(password);
        new TestBase().captureScreen("Login Page_1", driver);
        clickOnSubmitButton(isValidCredentials);
    }

    public void logout() {
        userProfileDrpDwn.click();
        new TestBase().captureScreen("Logout", driver);
        waitHelper.waitForElement(logout, 
        ObjectReader.reader.getExplicitWait());
        logout.click();
        log.info("clicked on logout link");
        TestBase.logExtentReport("clicked on logout link");
        waitHelper.waitForElement(loginBtn, 
        ObjectReader.reader.getExplicitWait());
    }
}
}

As Вы можете видеть в классе LoginPage, я использовал метод TestBase.logExtentReport (), который показывает исключение NullPointerException, и я не могу инициализировать ссылку TestBase в классе PageObject. Следовательно, как я могу использовать там метод logExtentReport?

Вспомогательный класс также получает NPE, даже после изменения области видимости логгера с окончательного на stati c. Ниже приведен код:

import com.uiFramework.engie.prospector.helper.logger.LoggerHelper;
import com.uiFramework.engie.prospector.testbase.TestBase;

public class VerificationHelper {

private WebDriver driver;
private static Logger log = 
LoggerHelper.getLogger(VerificationHelper.class);

public VerificationHelper(WebDriver driver){
    this.driver = driver;
}

public boolean isDisplayed(WebElement element){
    try{
        element.isDisplayed();
        log.info("element is Displayed.."+element.getText());
        TestBase.logExtentReport("element is 
     Displayed.."+element.getText());
        return true;
    }
    catch(Exception e){
        log.error("element is not Displayed..", e.getCause());
        TestBase.logExtentReport("element is not 
    Displayed.."+e.getMessage());
        return false;
    }
}

public boolean isNotDisplayed(WebElement element){
    try{
        element.isDisplayed();
        log.info("element is present.."+element.getText());
        TestBase.logExtentReport("element is 
    present.."+element.getText());
        return false;
    }
    catch(Exception e){
        log.error("element is not present..");
        return true;
    }
}

public String readValueFromElement(WebElement element){
    if(null == element){
        log.info("WebElement is null..");
        return null;
    }
    boolean status = isDisplayed(element);
    if(status){
        log.info("element text is .."+element.getText());
        return element.getText();
    }
    else{
        return null;
    }
}
public String getText(WebElement element){
    if(null == element){
        log.info("WebElement is null..");
        return null;
    }
    boolean status = isDisplayed(element);
    if(status){
        log.info("element text is .."+element.getText());
        return element.getText();
    }
    else{
        return null;
    }
}

}

1 Ответ

1 голос
/ 24 апреля 2020

Просто измените

private final Logger log = LoggerHelper.getLogger(LoginPage.class);

на

private static final Logger log = LoggerHelper.getLogger(LoginPage.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...