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

并行执行在Selenium页面对象模型中不起作用

贺懿轩
2023-03-14

public class CreateXCase extends SeleniumBase
{
    @BeforeTest(alwaysRun=true )
    public void setTestDetails()
    {
        author = System.getProperty("user.name"); 
        testcaseName="Verify that X case is successfully created";
        testcaseDec = "Create X Case";
        category="Regression";
    }


    @Test(priority=2,groups = {"Regression"})
    public  void createCaseWithNewParticipants() throws Exception
    {
        new LoginPage(driver, test).login().quickNavigation_CASE()
        .navigateToCreateCase().enterApplicantInformation()
        .navigateToCaseSection().createCase();
    }
}
public class CreateYcase extends SeleniumBase
{
    @BeforeTest(alwaysRun=true )
    public void setTestDetails()
    {
        author = System.getProperty("user.name"); 
        testcaseName="Verify that Y case is successfully created";
        testcaseDec = "Create Y Case";
        category="Regression";
    }

     @Test(priority=1,groups = {"Regression"})
     public  void createCaseWithNewParticipants() throws Exception
     {
        new LoginPage(driver,test).login().quickNavigation_CASE()
        .navigateToCreateCase().enterApplicantInformation()
        .navigateToCaseSection().createCase();
    }
public class SeleniumBase extends Reporter implements Browser, Element 
{

    public static WebDriverWait wait;
    @BeforeMethod(alwaysRun=true )
    public void configureAndLaunch() throws IOException 
    {           
        driver = startApp(ReadPropertyFile.get("Browser"), ReadPropertyFile.get("URL"));
    }

    @Override
    @AfterMethod (alwaysRun=true )
    public void closeBrowser()
    {
        driver.quit();
    }


@Override
    public RemoteWebDriver startApp(String browser, String url) 
    {
        try 
        {
            if (browser.equalsIgnoreCase("chrome")) 
            {
                System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe");
                driver = new ChromeDriver();

            } 
            else if (browser.equalsIgnoreCase("firefox")) 
            {
                System.setProperty("webdriver.gecko.driver", "./drivers/geckodriver.exe");
                driver = new FirefoxDriver();

            } 
            else if (browser.equalsIgnoreCase("ie")) 
            {
                System.setProperty("webdriver.ie.driver", "./drivers/IEDriverServer.exe");
                driver = new InternetExplorerDriver();

            }
            driver.get(url);

            driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
            driver.manage().window().maximize();
            return driver;

        } 
        catch (Exception e) 
        {
            int a = e.toString().indexOf("Exception:");
            String str = e.toString().substring(0, a + 30);
            System.out.println(str + "Exception captured");

            System.err.println("The Browser Could not be Launched. Hence Failed");

        } 
        finally 
        {
            takeSnap();

        }
        return null;
    } 
public abstract class Reporter {

    public  RemoteWebDriver driver;

    public  ExtentHtmlReporter reporter;
    public  static ExtentReports extent;
    public  ExtentTest test;
    public String testcaseName, testcaseDec, author ; 
    public String category="";
    public static  String excelFileName;
    public static String extentreportpath;

    @BeforeSuite (alwaysRun=true )
    public void startReport(ITestContext c) throws IOException 
    {
        String reportName=this.getClass().getName().substring(29, 33).toUpperCase() +" Screen Test Report";
        String screenName=this.getClass().getName().substring(29, 33).toUpperCase() +" Tests";
        String rptName="h5{font-size: 0px;}h5::after{content:\'"+screenName+"\';font-size: 1.64rem; line-height: 110%;margin: 0.82rem 0 0.656rem 0;}";
        String suiteName = c.getCurrentXmlTest().getSuite().getName();
        if (suiteName.contains("Default suite")||suiteName.contains("Failed suite"))
        suiteName ="";
        extentreportpath="./reports/"+suiteName+"Report.html";
        reporter = new ExtentHtmlReporter(extentreportpath);
        reporter.setAppendExisting(true);       
        extent   = new ExtentReports(); 
        extent.attachReporter(reporter);
        reporter.loadXMLConfig(new File("./Resources/extent-config.xml"));
        reporter.config().setTheme(Theme.DARK);
        reporter.config().setTestViewChartLocation(ChartLocation.BOTTOM);
        reporter.config().setReportName(reportName);
        reporter.config().setCSS(rptName);
        }

    @BeforeClass(alwaysRun=true )
    public ExtentTest report()  
    {
        test = extent.createTest(testcaseName, testcaseDec);
        test.assignAuthor(author);
        return test;  
    }



    public abstract long takeSnap();

    public void reportStep(String desc,String status,boolean bSnap)
    {
        MediaEntityModelProvider img=null;
        if(bSnap && !status.equalsIgnoreCase("INFO"))
        {
            long snapNumber=100000L;
            snapNumber=takeSnap();
            try
            {
                img=MediaEntityBuilder.createScreenCaptureFromPath("./../reports/images/"+snapNumber+".jpg").build();
            }
            catch(IOException e)
            {

            }
        }
        if(status.equalsIgnoreCase("pass"))
        {
            //test.pass(desc,img);
            test.log(Status.PASS, desc, img);

        }
        else if(status.equalsIgnoreCase("fail"))
        {

            //test.fail(desc,img);

            test.log(Status.FAIL, desc, img);
        }
        else if(status.equalsIgnoreCase("INFO"))
        {
            //test.pass(desc);
            test.log(Status.INFO, desc,img);
        }
    }

    public void reportStep(String desc,String status)
    {

        reportStep(desc,status,true);
    }


    @AfterSuite (alwaysRun=true )
    public void stopReport() throws Exception 
    {
        extent.flush();
    }
}

共有1个答案

罗梓
2023-03-14

使ExtentReport变量“extent”为静态解决了我的问题。例如:public static ExtentReports extent;我还修改了问题中的代码。

由于我在一个类中只有一个@test,所以parallel=“methods”在我的情况下没有用。

 类似资料:
  • 求帮助并行执行cucumber7。我的项目是cucumber和爪哇宁静。在这个链接https://johnfergusonsmart . com/parallel-test-execution-with-cucumber-and-serenity-BDD/中,它显示可以运行,但尝试了不同的组合,看起来我错过了一些东西。 这是我的pom。xml文件: 4.0.0 要执行:我将相同的标签添加到多个功能

  • 希望我不是第一个遇到这个问题的人。 问题是我还需要检查该元素在页面上是否可见,并且在执行checked之前它会出错(例如,使用WebDriverWait,将ExpectedConditions.ElementisVisible(by)传递给.Until方法)。 我如何将IWebElement和By locator清晰地分开,并允许在需要的地方进行这种明确的等待/检查? TLDR-如何维护页面对象模

  • 问题内容: 我正在尝试使用AJAX创建一个页面,但是当我获得该页面并且它包含Javascript代码时,它不会执行。 为什么? 我的ajax页面中的简单代码: …并且它不执行它。我正在尝试使用Google Maps API并通过AJAX添加标记,因此,每添加一个标记,我都会执行一个AJAX页面,该页面将获取新标记,并将其存储在数据库中,并应将标记“动态”添加到地图中。 但是,由于我无法以这种方式执

  • 问题内容: 我正在尝试提取URL,将其打开到新选项卡中,然后执行一些操作。我的代码是- 它会在新选项卡中打开URL,但不会对其执行任何操作。我该怎么办?? 问题答案: 您需要将焦点更改为新标签,因为它们通常会在后台打开。然后,您需要抓住当前当前选项卡的句柄。 这在这里描述:

  • 问题内容: 我刚刚为selenium网格2进行了设置。集线器和节点已启动并正在运行。我正在使用Selenium Webdriver + C#+ Nunit来运行测试,我现在想执行以下操作: 1) 将测试用例分布在不同的节点之间(并行),例如,节点1运行测试x,节点2运行测试y 2) 我需要能够为每个节点配置浏览器和平台类型,我现在要做的就是我做一个设置功能,并且所有节点都使用相同的平台和浏览器,那

  • 我正在使用Selenium为我的网站构建一个测试框架,我实际上希望您在使用页面对象模型时对良好实践的想法:让我们说,我有一个欢迎页面,其中包含一个注销按钮存在的标题,这个标题可以在大多数页面中看到在我的页面中,我认为最好为标题写一个单独的类,比如: 公共类欢迎页 我的问题是,你认为在欢迎页面中包含标题作为属性更好还是应该将它们分开? 让我们以注销测试方法的代码为例: 案例一: 案例2: 第二个问题