【发布时间】:2021-09-15 04:22:23
【问题描述】:
这是一个演示项目,使用页面对象模式和数据驱动框架来实现。
在继承之下,使用了构造函数的概念。
config.prpoerties 文件包含用户名、密码、url 和浏览器。
基类
package com.crm.qa.base;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import com.crm.qa.utilities.TestUtil;
public class TestBase {
public static Properties prop;
public static WebDriver driver;
public TestBase() {
//import variables from Config.properties file
try {
prop=new Properties();
FileInputStream fis=new FileInputStream(System.getProperty("user.dir")+"/src/main/java/com/crm/qa/configuration/config.properties");
prop.load(fis);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
public static void initialization()
{
String browser= prop.getProperty("browser");
if(browser.equalsIgnoreCase("firefox"))
{
System.setProperty("webdriver.gecko.driver", "./Drivers/geckodriver.exe");
FirefoxOptions firefoxOptions = new FirefoxOptions();
firefoxOptions.setCapability("marionette", true);
driver = new FirefoxDriver(firefoxOptions);
}
if(browser.equalsIgnoreCase("chrome"))
{
System.setProperty("webdriver.chrome.driver", "./Drivers/chromedriver.exe");
driver=new ChromeDriver();
}
driver.manage().window().maximize();
driver.manage().deleteAllCookies();
driver.manage().timeouts().pageLoadTimeout(TestUtil.PAGE_LOAD_TIMEOUT, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(TestUtil.IMPLICIT_WAIT, TimeUnit.SECONDS);
driver.get(prop.getProperty("baseURL"));
}
}
登录页面对象类
package com.crm.qa.pages;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import com.crm.qa.base.TestBase;
public class LoginPageCRM extends TestBase {
//PageFactory
@FindBy(name="username")
WebElement username;
@FindBy(name="password")
WebElement password;
@FindBy(xpath = "//input[@type='submit']")
WebElement loginBtn;
@FindBy(xpath= "//a[contains(text(),'Sign Up')]")
WebElement signUP;
@FindBy(xpath="//img[contains(@class,'img-responsive')]")
WebElement crmLogo;
//to initialize page objects
public LoginPageCRM()
{
PageFactory.initElements(driver, LoginPageCRM.class );
}
//Actions
//1. verify title of page
public String validateLoginPageTitle()
{
return driver.getTitle();
}
//2. Validate crm image
public boolean validateCRMLogo()
{
return crmLogo.isDisplayed();
}
//3. Login
public HomePageCRM login(String uname, String pwd)
{
username.sendKeys(uname);
password.sendKeys(pwd);
loginBtn.click();
return new HomePageCRM();
}
}
package com.crm.qa.testcases;
import org.testng.Assert;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.crm.qa.base.TestBase;
import com.crm.qa.pages.HomePageCRM;
import com.crm.qa.pages.LoginPageCRM;
public class LoginTest extends TestBase{
public LoginTest()
{
super();
}
LoginPageCRM loginPage;
public HomePageCRM homePageCRM;
@BeforeTest
public void setUP()
{
initialization();
loginPage=new LoginPageCRM();
}
@Test(priority=1)
public void LoginPageTitleTest()
{
String pageTitle= loginPage.validateLoginPageTitle();
Assert.assertEquals(pageTitle,"CRMPRO - CRM software for customer relationship management, sales, and support.");
}
@Test(priority=2)
public void CRMLogoTest()
{
Assert.assertEquals(loginPage.validateCRMLogo(), true);
}
@Test(priority=3)
public void loginPageTest()
{
homePageCRM= loginPage.login(prop.getProperty("username"), prop.getProperty("password"));
}
@AfterTest
public void tearDown()
{
driver.quit();
}
}
现在,当我将 LoginTest 类作为 TestNG 测试运行时,控制台中出现如下错误-->
com.crm.qa.testcases.LoginTest#setUP
Exception
java.lang.StackOverflowError
at java.base/java.util.stream.StreamOpFlag.fromCharacteristics(StreamOpFlag.java:733)
at java.base/java.util.stream.StreamSupport.stream(StreamSupport.java:70)
at java.base/java.util.Arrays.stream(Arrays.java:5446)
at java.base/java.util.Arrays.stream(Arrays.java:5427)
at java.base/java.lang.Class.methodToString(Class.java:3579)
at java.base/java.lang.Class.getConstructor0(Class.java:3508)
at java.base/java.lang.Class.getConstructor(Class.java:2244)
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:128)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:64)
at com.crm.qa.pages.LoginPageCRM.<init>(LoginPageCRM.java:33)
at jdk.internal.reflect.GeneratedConstructorAccessor9.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350)
at java.base/java.lang.Class.newInstance(Class.java:645)
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:131)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:64)
at com.crm.qa.pages.LoginPageCRM.<init>(LoginPageCRM.java:33)
at jdk.internal.reflect.GeneratedConstructorAccessor9.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128)
at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:350)
at java.base/java.lang.Class.newInstance(Class.java:645)
at org.openqa.selenium.support.PageFactory.instantiatePage(PageFactory.java:131)
at org.openqa.selenium.support.PageFactory.initElements(PageFactory.java:64)
at com.crm.qa.pages.LoginPageCRM.<init>(LoginPageCRM.java:33)
at jdk.internal.reflect.GeneratedConstructorAccessor9.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
........
我的 Eclipse 版本: 版本:2021-03 (4.19.0) 版本号:20210312-0638
eclipse.ini 文件
-startup
plugins/org.eclipse.equinox.launcher_1.6.100.v20201223-0822.jar
--launcher.library
C:\Users\JACOB\.p2\pool\plugins\org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.100.v20210209-1541
-product
org.eclipse.epp.package.java.product
-showsplash
C:\Users\JACOB\.p2\pool\plugins\org.eclipse.epp.package.common_4.19.0.20210311-1200
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vm
C:/Program Files/Java/jdk-15.0.1/bin/javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=11
-Dosgi.instance.area.default=@user.home/eclipse-workspace
-Dsun.java.command=Eclipse
-XX:+UseG1GC
-XX:+UseStringDeduplication
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=11
-Dosgi.dataAreaRequiresExplicitInit=true
-Dorg.eclipse.swt.graphics.Resource.reportNonDisposed=true
-Xms256m
-Xmx2048m
--add-modules=ALL-SYSTEM
-Declipse.p2.max.threads=10
-Doomph.update.url=http://download.eclipse.org/oomph/updates/milestone/latest
-Doomph.redirection.index.redirection=index:/->http://git.eclipse.org/c/oomph/org.eclipse.oomph.git/plain/setups/
【问题讨论】:
标签: java eclipse selenium selenium-webdriver testng