使用testng在一个浏览器中跨多个类运行java selenium webdriver测试

时间:2016-02-12 19:08:39

标签: java selenium testing

当前设置, 我目前设置了我的测试,每个类都实例化自己的浏览器。每个类都基于我想要测试的页面。我现在希望我的测试能够在一个浏览器中运行。 Mu代码具有当前设置。我有一个基本页面,其中继承了常用方法,然后我有一个java.class用于特定页面的方法,后跟一个test.class来运行我的测试。

public class BasePage {

@FindBy(id = "j_username") WebElement field_Username;
@FindBy(id = "j_password") WebElement field_Password;
@FindBy(name = "login") WebElement button_Login;

public WebDriver driver;
public WebDriverWait wait;

protected JavascriptExecutor jsExecutor;

public String PAGE_URL;
public String PAGE_TITLE;

public BasePage(WebDriver driver){
    this.driver = driver;
    jsExecutor = ((JavascriptExecutor) driver);
    wait = new WebDriverWait(driver, 200);
}

public void loadPage(){

    driver.get(getPageUrl());
    driver.manage().window().maximize();
    for(int i=0; i<2; i++){ 
        driver.findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT));
        } 
}

protected void login(String username, String password){
    findDynamicElement(By.id("j_username") , 7);
    setText_Login(username);
    setText_PasswordLogin(password);
    clickLoginMain();
}

public class CreateBillingRange  extends BasePage {

    @FindBy(id = "j_username") WebElement field_Username;
    @FindBy(id = "j_password") WebElement field_Password;
    @FindBy(name = "login") WebElement button_Login;
    @FindBy(id = "add_label") WebElement button_AddLabel;
    @FindBy(linkText = "Policy") WebElement field_Policy;
    @FindBy(linkText = "SPCM") WebElement field_SPCM;
    @FindBy(linkText = "Billing Range") WebElement field_BR;
    @FindBy(id = "addChargingProfile_label") WebElement button_addChargingProfile;
    @FindBy(name = "addBillingNumberRange") WebElement button_addBillingNumberRange;
    @FindBy(id = "startRange") WebElement field_StartRange; 
    @FindBy(id = "endRange") WebElement field_EndRange; 
    @FindBy(id = "name") WebElement field_Name;
    @FindBy(name = "saveBillingNumberRange") WebElement button_SaveBillingNumberRange;

    @FindBy(id = "number") WebElement field_NumberSearch;
    @FindBy(name = "search") WebElement field_Submit;
    @FindBy(name = "ids") WebElement checkbox_Number;
    @FindBy(name = "deleteBillingNumberRange") WebElement button_Delete;
    @FindBy(id = "okDialogButton_label") WebElement okDialogButton_label;



    public CreateBillingRange(WebDriver driver) {
        super(driver);
        this.PAGE_URL = "http://xxxxx:xxx/page";
    }

    public void login(String username, String password){
        findDynamicElement(By.id("j_username") , 7);
        setText_Login(username);
        setText_PasswordLogin(password);
        clickLoginMain();
    }

    public void setText_Login(String text){
        setElementText(field_Username, text);
    }


    public void setText_PasswordLogin(String text){
        setElementText(field_Password, text);
    }

    public void clickLoginMain(){
        clickElement(button_Login);
    }

    public void click_SignUpButton(){
        clickElement(button_Login);
    }

    public void openCharging() {

        findDynamicElement(By.linkText("Policy") , 19);
        clickElement(field_Policy);
        clickElement(field_SPCM);
        clickElement(field_BR);

    }   

    public void addBillingRange(String start, String end){
        findDynamicElement(By.name("addBillingNumberRange"), 10);
        clickElement(button_addBillingNumberRange);
        findDynamicElement(By.id("startRange"), 3);
        setElementText(field_StartRange, start);
        setElementText(field_EndRange, end);
        clickElement(button_SaveBillingNumberRange);
        findDynamicElement(By.id("successMessages") , 5);
    }

    public void deleteBillingRange(String BillingRange){
        findDynamicElement(By.name("search"),20);
        field_NumberSearch.click();
        field_NumberSearch.sendKeys(BillingRange);
        field_Submit.click();
        findDynamicElement(By.name("ids"),20);
        checkbox_Number.click();
        button_Delete.click();
        accpetConfirmSuccess();

    }




public class CreateBundle  extends BasePage{

    @FindBy(id = "j_username") WebElement field_Username;
    @FindBy(id = "j_password") WebElement field_Password;
    @FindBy(name = "login") WebElement button_Login;
    @FindBy(id = "add_label") WebElement button_AddLabel;
    @FindBy(linkText = "Policy") WebElement field_Policy;
    @FindBy(linkText = "SPCM") WebElement field_SPCM;
    @FindBy(linkText = "Plan Mgmt") WebElement field_PlanMgmt;
    @FindBy(linkText = "Bundles") WebElement field_Bundles;
    @FindBy(id = "addOcsButton_label") WebElement button_addOCS;
    @FindBy(id = "alias") WebElement field_alias;
    @FindBy(id = "value") WebElement field_value;
    @FindBy(id = "submitActionButton_label") WebElement button_OCSsave; 
    @FindBy(id = "add") WebElement button_addLabel;
    @FindBy(id = "dataPlanName") WebElement field_DataPlan;
    @FindBy(id = "addComboPackServiceButton_label") WebElement button_addComboService;
    @FindBy(id = "amount") WebElement field_amount;
    @FindBy(id = "ocsAccountReference") WebElement field_OCSAccount;
    @FindBy(id = "days") WebElement field_Days;
    @FindBy(id = "submitActionButton_label") WebElement button_SubmitAction;
    @FindBy(id = "save_label") WebElement button_BundleSave;

    @FindBy(id = "dataPlanName") WebElement field_OCSSearch;
    @FindBy(id = "search_label") WebElement field_OCSSubmit;
    @FindBy(name = "ids") WebElement checkbox_OCS;
    @FindBy(id = "delete_label") WebElement button_DeleteOCS;
    @FindBy(xpath = "/html/body/div/div[2]/div[1]/form/fieldset[3]/div[2]/table/tbody/tr[4]/td[1]/input") WebElement field_OCSDelete;
    @FindBy(id = "deleteOcsRef_label") WebElement button_deleteOCS;


    public CreateBundle(WebDriver driver) {
        super(driver);
        this.PAGE_URL = "http://xxxxx.xxx.x/page";
    }


    public void openBundle() {

        findDynamicElement(By.linkText("Policy") , 19);
        clickElement(field_Policy);
        clickElement(field_SPCM);
        clickElement(field_PlanMgmt);
        clickElement(field_Bundles);

    }   

这将在不同的浏览器中运行我的测试

public class BillingRange_Test {


    public WebDriver driver;
    public WebDriverWait wait;
    CreateBillingRange CreateBillingRange;


    @BeforeClass(alwaysRun = true)
    public void setup() throws MalformedURLException{
        DesiredCapabilities capabilities = DesiredCapabilities.firefox();
        capabilities.setBrowserName("firefox");
        this.driver = new RemoteWebDriver(new URL("http://192.168.1.237:5556/wd/hub"), capabilities);
        wait = new WebDriverWait(driver, 10);
        CreateBillingRange = PageFactory.initElements(driver, CreateBillingRange.class );
    }

    @AfterClass(alwaysRun = true)
    public void teardown(){
        this.driver.quit();
    }


    @BeforeTest
    public void testSignUpMainPage(){
        CreateBillingRange.loadPage();
        CreateBillingRange.login("super","5tg7uj6yh");

    }

    @Test(priority=1,retryAnalyzer=Retry.class)
    public void addBillingRange(){
        CreateBillingRange.openCharging();
        CreateBillingRange.addBillingRange("8800088","1111111111");

    }






public class Bundle_Test {


    public WebDriver driver;
    public WebDriverWait wait;
    CreateBundle CreateBundle;


    @BeforeClass(alwaysRun = true)
    public void setup() throws MalformedURLException{
        DesiredCapabilities capabilities = DesiredCapabilities.firefox();
        capabilities.setBrowserName("firefox");
        this.driver = new RemoteWebDriver(new URL("http://192.168.1.237:5556/wd/hub"), capabilities);
        wait = new WebDriverWait(driver, 10);
        CreateBundle = PageFactory.initElements(driver, CreateBundle.class );
    }

    @AfterClass(alwaysRun = true)
    public void teardown(){
        this.driver.quit();
    }


    @Test(priority=1)
    public void testSignUpMainPage(){
        CreateBundle.loadPage();
        CreateBundle.login("super","5tg7uj6yh");

    }

    @Test
    public void addBundle(){
        CreateBundle.openBundle();
        CreateBundle.createBundles("Test", "1","AFL","1");

    }

这将在一个浏览器中运行我的测试

    public WebDriver driver;
    public WebDriverWait wait;
    protected String baseUrl;
    protected String nodeURL;
    CreateBillingRange CreateBillingRange;
    CreateBundle CreateBundle;


    @BeforeClass(alwaysRun = true)
    public void setup() throws MalformedURLException{
        DesiredCapabilities capabilities = DesiredCapabilities.firefox();
        capabilities.setBrowserName("firefox");
        this.driver = new RemoteWebDriver(new URL("http://192.168.1.236:5555/wd/hub"), capabilities);
        wait = new WebDriverWait(driver, 10);
        CreateBillingRange = PageFactory.initElements(driver,CreateBillingRange.class );
        CreateBundle = PageFactory.initElements(driver, CreateBundle.class );
    }




    //@AfterClass(alwaysRun = true)
    public void teardown(){
        this.driver.quit();
    }


    @Test(priority=20)
    public void testSignUpMainPage(){
        CreateBillingRange.loadPage();
        CreateBillingRange.login("super","5tg7uj6yh");
        System.out.println("Yes");

    }

    @Test(priority=21)
    public void addOCSAccount(){
        CreateBundle.openBundle();
        CreateBundle.createOSCAccount("Name Selenium WebDriver", "2");

    }

}

这将在一个浏览器中运行我的测试。但是,在一个测试类中拥有所有对象是不切实际的。我想做的是运行我的第一个测试类并实例化broswer然后使用TestNG调用每个测试类并在一个浏览器中运行我的测试。但是,执行此操作只会在运行这些测试并且调用下一个测试类时包含@BeforeClass的第一个类中运行我的测试。我得到null pointer error。任何人都可以帮助我在我的所有测试类的一个浏览器中运行我的测试。

1 个答案:

答案 0 :(得分:0)

看起来你正在每个测试的BeforeClass中启动驱动程序并在之后关闭。要仅在一个浏览器中工作并在执行完全套件或总套件后退出,只需创建一个类并在BeforeSuite中启动驱动程序。将此扩展到所有测试类。例如

join course on c.dname = course.dname and
           e.cno = course.cno and
           lower(c.cname) like lower('%WORLD%') and 
           lower(c.cname) like lower('%HISTORY%')

将此类扩展到所有测试类。在你的测试类中,不要再在beforeclass中使用该设置,也不要使用关闭浏览器的后类

 public class config{

 static WebDriver driver;

 @BeforeSuite
 public void setup(){

driver=new FirefoxDriver(); //here use your setup

}

@AfterSuite
public void tearDown(){
driver.quit();
}

}

谢谢你, 穆拉利