如何在java selenium中的POM-TestNG类中使用SELECT语句

时间:2015-12-15 16:39:02

标签: java selenium testng

我陷入了基本程序,其中如何在POM类中编写Select语句,另一个TestNG类正在调用该POM类   下面是我的POM类代码:

package POM;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.Select;

public class LoginCRM {
    @FindBy(id="ctl00_ContentPlaceHolder1_PassiveIdentityProvidersDropDownList")
    private WebElement dropdown;

    @FindBy(id="ctl00_ContentPlaceHolder1_PassiveSignInButton")
    private WebElement sltbtn;

    @FindBy(id="ctl00_ContentPlaceHolder1_UsernameTextBox")
    private WebElement usrname;

    @FindBy(id="ctl00_ContentPlaceHolder1_PasswordTextBox")
    private WebElement password;

    @FindBy(id="ctl00_ContentPlaceHolder1_SubmitButton")
    private WebElement login_btn;

    public LoginCRM(WebDriver driver) {
        PageFactory.initElements(driver, this);
        // TODO Auto-generated constructor stub
    }

    public void login()
    {
        Select sel = new  Select(dropdown);
        sel.selectByVisibleText("HP Internal STS");

        sltbtn.click();
        usrname.sendKeys("r@gmail.com");
        password.sendKeys("@@@@@@@");
        login_btn.click();
    }

}

我在选择登录方法声明时获取 NullPointerException 下面是TestNG类代码

 @Test
  public void login() {
      LoginCRM log = new LoginCRM(driver);
      log.login();
  }

以下是HTML代码

<form id="aspnetForm" action="/adfs/ls/?wa=wsignin1.0&wtrealm=https%3a%2f%2fppmss360.ford.qa.ams.hpmsdynamics.com%2f&wctx=rm%3d1%26id%3dd05e86a7-ae60-4d86-af91-c70fe89fb627%26ru%3dhttps%253a%252f%252fppmss360.ford.qa.ams.hpmsdynamics.com%252fdefault.aspx&wct=2015-12-15T16%3a42%3a34Z&wauth=urn%3aoasis%3anames%3atc%3aSAML%3a1.0%3aam%3apassword" method="post" name="aspnetForm">
<div>
<div>
<input type="hidden" value="14" name="__db"/>
<div class="MainArea">
<div class="Header">
<div class="GroupXLargeMargin">
<div class="GroupLargeMargin">
<div class="MainActionContainer">
<div class="GroupXLargeMargin">
<div class="GroupXXLargeMargin">
<select id="ctl00_ContentPlaceHolder1_PassiveIdentityProvidersDropDownList" name="ctl00$ContentPlaceHolder1$PassiveIdentityProvidersDropDownList">
<option value="http://corp.sts.ford.com/adfs/services/trust">Ford Corp STS</option>
<option value="https://mscrm00b.hpuscrmpoc.com/adfs/services/trust">HP Internal STS</option>
</select>
<div>
</div>
</div>

以下是堆栈跟踪中打印的异常

[TestNG] Running:
  C:\Selenium Workspace\FMC360Automation\testng.xml

java.lang.NullPointerException
    at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:69)
    at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:38)
    at com.sun.proxy.$Proxy6.getTagName(Unknown Source)
    at org.openqa.selenium.support.ui.Select.<init>(Select.java:44)
    at POM.LoginCRM.login(LoginCRM.java:34)
    at Script.LoginMain.login(LoginMain.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:639)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:821)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1131)

评论是否有人可以做到需要..! :)

2 个答案:

答案 0 :(得分:1)

您没有在任何地方初始化WebDriver driver。在@BeforeTest中添加TestNG class方法,如下所示。我尝试使用此添加的代码,现在选择 HP Internal STS

public class WebDriverTest  {       
    WebDriver driver;

    @BeforeTest
     public void setup(){

        driver = new FirefoxDriver();

        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        driver.get("file:///C:/Users/dummyUser/Desktop/select_page.html");

    }
@Test
public void testLogin()
{
     LoginCRM log = new LoginCRM(driver);
     log.login();
    }

}

答案 1 :(得分:0)

您需要在测试前和测试后添加

@BeforeTest
public void setup(){
    driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("file:///C:/Users/dummyUser/Desktop/select_page.html");
}

@afterTest
    public void close(){
    driver.quit();
}