【问题标题】:How to Work with SELECT statement in POM-TestNG classes in java selenium如何在 java selenium 的 POM-TestNG 类中使用 SELECT 语句
【发布时间】:2015-12-15 16:39:02
【问题描述】:

我被困在基本程序中,如何在 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)

评论如果有人可以做需要..! :)

【问题讨论】:

标签: java selenium testng


【解决方案1】:

您没有在任何地方初始化WebDriver driver。在您的TestNG class 中添加@BeforeTest 方法,如下所示。我用这个添加尝试了你的代码,它现在选择 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();
    }

}

【讨论】:

    【解决方案2】:

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

    @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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-17
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2015-12-30
      相关资源
      最近更新 更多