当前位置: 首页 > 知识库问答 >
问题:

如何在页面对象中使用数据块报告日志?

卢皓轩
2023-03-14

我在使用测试时遇到空指针异常。将()方法记录到页面对象中。

我的扩展报告测试在TestBase类的“@Beforemethod”中定义。因此,我需要访问test.log();进入Page Object例如。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);
}

下面是登录页面。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());
    }
}
}

正如您在LoginPage类中看到的,我使用了TestBase。logExtentReport()方法,该方法显示NullPointerException,我无法在PageObject类中初始化TestBase引用。因此,如何在那里使用logExtentReport方法?

Helper类也得到了NPE,即使在将logger的范围从final更改为static之后也是如此。代码如下:

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个答案

叶晋
2023-03-14

换衣服

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

private static final Logger log = LoggerHelper.getLogger(LoginPage.class);
 类似资料:
  • 有人能发布一个如何使用web服务作为数据源定义子报表的工作示例吗? 我正在阅读以下内容: http://community . jasper soft . com/project/we B- service-data-source 在“子报告和其他数据集”一节中,我需要考虑(2)的情况: 您有一个希望循环的主结果集,并且希望对每一行执行一个新的查询(webservice调用) 在子报表配置(或数据

  • 我是Jasper报告的新手。我有一个包含2组的报告。根据查询,正在打印多页。 第一组高度 - 95分,第二组高度 - 144分 我希望这些多页打印在一页中(我希望一页中包含5页)。每页高度为239点。(即使页面内容小于239分,我希望将剩余部分保留为空白,并在239分后开始下一页)。我尝试创建一个报告,并将上述报告作为子报告,并设置主报告的高度为1195(239*5)点。尽管如此,这些都被打印在不

  • 如何在jasper子报告中显示当前页码?我只做了第一页,变量如下:$V{page_NUMBER}和“(”$V{page_COUNT}“)”,但我们如何在所有子报告中显示?

  • 使用指南 - 数据报告 百度统计为您提供网站的流量、来源、页面、访客、转化、SEO等多种网站分析报告,支持多维度细分和自定义查看,帮助您进行SEM、SEO优化,提高转化率。 概述 百度统计提供哪些数据报告 如何全方位地解读数据 如何添加常用报告 为什么有些报告没有权限 数据的下载与发送 报告的时效性及历史数据的存储 安装统计代码前的网站数据能查看吗主页&网站概况 主页介绍 帐户下网站简介 网站概况

  • 所有我的页面对象都是这样的: 如果我能说“在任何地方都使用xpath”,那就更好了——这一切都会崩溃的 文档中说,您应该能够在“测试设置”中设置“use\u xpath”:true,但我已经在nightwatch中看到的所有地方尝试过了。json,它没有任何效果。 (在任何情况下,尚不完全清楚它们是否意味着此设置会影响页面对象文件中的声明:该示例仅显示它会影响测试用例中的子项断言调用)。