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

使用POM(pagefactory)重新更新的并行执行

郁景龙
2023-03-14

我找不到解决方法,所以我在这里发帖寻求帮助。我在并行运行测试时遇到问题(使用POM和page factory)。

*\Testbase类*/

  public WebDriver driver;
    @BeforeClass
    @Parameters("Browsername")
        public void initializeaccount(String Browsername) 
        {
           if(Browsername.equals("chrome")) {
                System.setProperty("webdriver.chrome.driver", "C:\\Users\\User\\eclipse-workspace\\test\\chromedriver.exe");
                 driver = new ChromeDriver();   
            }
              else if(Browsername.equals("chrome1")) {
                    System.setProperty("webdriver.chrome.driver", "C:\\Users\\User\\eclipse-workspace\\test\\chromedriver.exe");
                     driver = new ChromeDriver();   
                }
                  driver.manage().window().maximize();
                  driver.manage().deleteAllCookies(); 
                  driver.manage().timeouts().pageLoadTimeout(testutility.page_Load_Timeout, TimeUnit.SECONDS); 
                  driver.manage().timeouts().implicitlyWait(testutility.page_Load_Timeout, TimeUnit.SECONDS); 
                  driver.get(prop.getProperty("accounturl"));   
        }

*POM类*

public CreateAccountPage()  {
        PageFactory.initElements(driver, this);
    }
    
    //action 
    public String vailidatewebpagetitle() throws InterruptedException
    {
        return driver.getTitle();
    }

*测试用例*

    public Accountpagetest() {
    super(); 
}

@BeforeMethod
public void setup()
{
    
    CreateAccountPage = new CreateAccountPage();    
}
@Test(priority=1)
public void verifycreateaccountwebpagetitle() throws InterruptedException
{
    String title = CreateAccountPage.vailidatewebpagetitle();
    Assert.assertEquals(title, "google");
}

*XML文件*

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestSuite" parallel= "tests" thread-count="2">   
<listeners>
        <listener class-name="Report.DownloadReport" />
    </listeners>
 <test name="Testchrome" parallel= "methods" thread-count="5">
 <parameter name="Browsername" value ="chrome"> </parameter>
    <classes>
   <class name="testcases.Accountpagetest"/> 
    </classes>
  </test> <!-- Test -->
<test name="Testchrome2" parallel= "methods" thread-count="5">
 <parameter name="Browsername" value ="chrome1"> </parameter>
    <classes>
   <class name="testcases.Accountpagetest"/> 
</classes>
 </test>
</suite> <!-- Suite -->

我收到java nullpointerexception错误

  ===============================================
TestSuite
Total tests run: 2, Passes: 0, Failures: 2, Skips: 0
===============================================

java.lang.NullPointerException
    at pages.CreateAccountPage.vailidatewebpagetitle(CreateAccountPage.java:44)
    at testcases.Accountpagetest.verifycreateaccountwebpagetitle(Accountpagetest.java:37)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)
    at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:584)
    at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:172)
    at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
    at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:804)
    at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:145)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:830)

java.lang.NullPointerException
    at pages.CreateAccountPage.vailidatewebpagetitle(CreateAccountPage.java:44)
    at testcases.Accountpagetest.verifycreateaccountwebpagetitle(Accountpagetest.java:37)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:133)
    at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:584)
    at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:172)
    at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
    at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:804)
    at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:145)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:830)

**更新我碰到的错误,/*POM类*\createnewpage方法驱动程序返回一个空参数。

无论如何,我在这里尝试的是运行两个chrome浏览器进行并行测试。

任何有过这个问题的人都可以建议需要做哪些更正?我卡住了。

共有1个答案

谷飞星
2023-03-14

将参数“Browsername”读入方法参数中,并删除读取方法代码内属性的调用

public WebDriver driver;

@Parameters("Browsername")
    public void initializeaccount(String Browsername) 
    {
        
       if(Browsername.equals("chrome")) {
            System.setProperty("webdriver.chrome.driver", "C:\\Users\\User\\eclipse-workspace\\test\\chromedriver.exe");
             driver = new ChromeDriver();   
        }
          else if(Browsername.equals("chrome1")) {
                System.setProperty("webdriver.chrome.driver", "C:\\Users\\User\\eclipse-workspace\\test\\chromedriver.exe");
                 driver = new ChromeDriver();   
            }
              driver.manage().window().maximize();
              driver.manage().deleteAllCookies(); 
              driver.manage().timeouts().pageLoadTimeout(testutility.page_Load_Timeout, TimeUnit.SECONDS); 
              driver.manage().timeouts().implicitlyWait(testutility.page_Load_Timeout, TimeUnit.SECONDS); 
              driver.get(prop.getProperty("accounturl"));   
    }
 类似资料:
  • 当使用liquibase maven更新目标执行更新时,我得到了以下错误。 LiquiBase.Exception.ChangeLogParseException:解析db.changeLogDiff.xml的第4459行第108列时出错:cvc-complex-type.3.2.2:属性“Object QuotingStrategy”不允许出现在元素“Change Set”中。 diff生成的c

  • 问题内容: 使用in 时可以执行更新吗?例如: 问题答案: 有一个非常强大的功能,称为: [15.4。DML风格的操作](http://docs.jboss.org/hibernate/orm/4.3/manual/en- US/html/ch15.html#batch-direct) 来自doc的小引用: …但是,Hibernate提供了通过Hibernate查询语言执行批量SQL样式DML语句

  • 问题内容: 我有一个页面正在从第三方(新闻提要)加载脚本。脚本的url在加载时动态分配(根据第三方代码)。 然后从中加载的脚本创建并加载具有新闻提要中各种内容的元素,并以漂亮的格式等将元素加载到其中(传入ID“ div1287”,以便脚本知道在何处加载内容)。 唯一的问题是,它只会加载一次。我希望它每n秒重新加载一次(从而显示新内容)。 所以,我想我会尝试一下: div清除后,我得到警报,但是没有

  • 对于一个小的新项目,我决定尝试一下JDBI(通常我使用hibernate/jpa)。 我喜欢使用@SqlUpdate/@Sql Query创建轻量级、基于注释的dao。 但是:在某些情况下,我无法确定是要创建实体还是更新现有实体。我会放置一个“选择”语句,并根据其返回值使用插入或更新语句。 问题:jdbi中的“仅接口”道是否以某种方式支持这一点?还是我必须自己编写一个“createOrUpdate

  • 在数据库表中,如下所示; 我想做的如下; 如何在不刷新的情况下更新新列(gsm列)(php artisan migrate:refresh)

  • 第一个类运行成功,但第二个类失败与错误: “org.testng.TestNGException:无法调用public void TestScripts.NewAccountCreation.AccountCreation1():将其设为静态或向类中添加无参数构造函数” 如果我添加非参数构造函数,我将得到空指针异常。 我使用PageFactory来设计我的测试用例。 Eclipse版本:开普勒 T