用于所有浏览器驱动程序和冗余代码的Selenium Java基类
我是Selenium和Java新手,需要基类方面的帮助。我有我的基地,我为驱动程序浏览器和它的关闭设置方法。问题是,当我从main调用这些方法时,总是会调用web驱动程序,并且浏览器会多次打开。如果我不希望代码重复,那么最佳实践是什么 我想要一个好的项目结构 主要内容: 测试库:用于所有浏览器驱动程序和冗余代码的Selenium Java基类,java,google-chrome,selenium,selenium-webdriver,automated-tests,Java,Google Chrome,Selenium,Selenium Webdriver,Automated Tests,我是Selenium和Java新手,需要基类方面的帮助。我有我的基地,我为驱动程序浏览器和它的关闭设置方法。问题是,当我从main调用这些方法时,总是会调用web驱动程序,并且浏览器会多次打开。如果我不希望代码重复,那么最佳实践是什么 我想要一个好的项目结构 主要内容: 测试库: public class TestBase { String a = System.setProperty("webdriver.chrome.driver", "path
public class TestBase {
String a = System.setProperty("webdriver.chrome.driver",
"path");
WebDriver driver = new ChromeDriver();
protected WebDriver setUpBeforeTestClass() {
return driver;
}
protected void setUpBeforeTestMethod() {
driver.get("website");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void tearDownAfterTestClass() {
driver.close();
}}
登录测试:
public class LoginTest extends TestBase {
public void login() throws InterruptedException {
WebElement username = driver.findElement(By.name("username"));
username.sendKeys("username");
}
}
重点是我不想再写了
WebDriver driver = new ChromeDriver();
driver.get("website"); System.setProperty("webdriver.chrome,"path");
对于函数或类中的每个测试。因此我想创建基类并从中继承。示例
Selenium
使用JUnit
使用页面对象模型进行测试
TestBase
public class TestBase
{
private String a = System.setProperty("webdriver.chrome.driver", "path");
protected WebDriver driver;
@Before //Before each test case, use BeforeClass for before each test class
public static void setUpBeforeTestCase() {
driver = new ChromeDriver();
driver.get("website");
}
@After
public static void tearDownAfterTestCase() {
driver.Quit(); //driver.Close() closes the window, but doesn't properly dispose of the driver
}
}
public class BasePage
{
protected WebDriver driver;
//Other common stuff your Page Objects will do, like wait for an element
}
public class LoginPage extends BasePage
{
@FindBy(how = How.NAME, using = "username")
private WebElement usernameBox;
//something for passwordBox and loginButton
public LoginPage(WebDriver currentDriver)
{
driver = currentDriver;
}
public LandingPage login(String username, String password)
{
usernameBox.sendKeys(username);
passwordBox.sendKeys(password);
loginButton.click();
return PageFactory.initElements(driver, LandingPage.class);
}
}
登录测试:
public class LoginTest extends TestBase {
@Test
public void loginAndOutAsAdmin(){
LoginPage loginPage = PageFactory.initElements(driver, LoginPage.class);
LandingPage landingPage = loginPage.login("adminUser", "adminPassword");
landingPage.logout();
//Do some sort of assert here that you are logged out
}
}
基本页面
public class TestBase
{
private String a = System.setProperty("webdriver.chrome.driver", "path");
protected WebDriver driver;
@Before //Before each test case, use BeforeClass for before each test class
public static void setUpBeforeTestCase() {
driver = new ChromeDriver();
driver.get("website");
}
@After
public static void tearDownAfterTestCase() {
driver.Quit(); //driver.Close() closes the window, but doesn't properly dispose of the driver
}
}
public class BasePage
{
protected WebDriver driver;
//Other common stuff your Page Objects will do, like wait for an element
}
public class LoginPage extends BasePage
{
@FindBy(how = How.NAME, using = "username")
private WebElement usernameBox;
//something for passwordBox and loginButton
public LoginPage(WebDriver currentDriver)
{
driver = currentDriver;
}
public LandingPage login(String username, String password)
{
usernameBox.sendKeys(username);
passwordBox.sendKeys(password);
loginButton.click();
return PageFactory.initElements(driver, LandingPage.class);
}
}
登录页面
public class TestBase
{
private String a = System.setProperty("webdriver.chrome.driver", "path");
protected WebDriver driver;
@Before //Before each test case, use BeforeClass for before each test class
public static void setUpBeforeTestCase() {
driver = new ChromeDriver();
driver.get("website");
}
@After
public static void tearDownAfterTestCase() {
driver.Quit(); //driver.Close() closes the window, but doesn't properly dispose of the driver
}
}
public class BasePage
{
protected WebDriver driver;
//Other common stuff your Page Objects will do, like wait for an element
}
public class LoginPage extends BasePage
{
@FindBy(how = How.NAME, using = "username")
private WebElement usernameBox;
//something for passwordBox and loginButton
public LoginPage(WebDriver currentDriver)
{
driver = currentDriver;
}
public LandingPage login(String username, String password)
{
usernameBox.sendKeys(username);
passwordBox.sendKeys(password);
loginButton.click();
return PageFactory.initElements(driver, LandingPage.class);
}
}
我没有试着编译这个,但这是基本的想法。我将让您填写详细信息。因为这些都是测试,所以您不应该像使用
Main
方法的程序一样运行它,而应该研究一个单元测试框架,如junit
或任何其他您认为合适的框架。这些框架内置了设置和拆卸的概念,使其更易于实现。