2016-11-15 113 views
1

我已經在硒中編寫了一個自動化測試用例來測試登錄頁面,並且應該點擊忘記密碼link.Browser打開並轉到給定的URL但忘記了密碼鏈接不會自動點擊,有人可以告訴我的代碼有什麼問題。Selenium自動元素點擊返回null

BaseCode

public class Forgetpsw { 

    WebDriver driver; 

    @BeforeTest 
    public void Browseropen() throws Exception { 
     Browsers startup=new Browsers(); 
     startup.Initiating(); 
    } 

    @Test 
    public void Forget(String username) throws Exception{ 
     driver.findElement(By.xpath("//*[text()='Forgot Password?']")).click(); 
     Thread.sleep(3000L); 
     driver.findElement(By.xpath("//*[@placeholder='User ID'][@id='forgotPasswordForm:j_idt13:0:username']")).sendKeys(username); 
    } 
} 

Browsers.java

public class Browsers { 
    public WebDriver driver; 

    public void Initiating() throws IOException { 
     Properties prop= new Properties(); 
     InputStream fis = new FileInputStream("D:\\Workspace\\TMS\\selenium\\ZLive\\src\\datadriven.properties"); 
     prop.load(fis); 


     System.out.println("Initiating Browser"); 

     if (prop.getProperty("browser").equals("firefox")) 
     { 
      driver=new FirefoxDriver(); 
     } 
     else 
     { 
      System.setProperty("webdriver.chrome.driver", "D:\\selenium\\chromedriver_win32\\chromedriver.exe"); 
      driver = new ChromeDriver(); 
     } 
     driver.manage().window().maximize(); 
     driver.get(prop.getProperty("url")); 
    } 
} 

data.properties

browser=firefox 
url=http://abcd.xxx.in/login 
username=32131 
pasword=32131 

康壽E:

[TestNG] Running: 
    C:\Users\ds\AppData\Local\Temp\testng-eclipse-42991103\testng-customsuite.xml 

Initiating Browser 

=============================================== 
    Default test 
    Tests run: 0, Failures: 0, Skips: 0 
=============================================== 


=============================================== 
Default suite 
Total tests run: 0, Failures: 0, Skips: 0 
=============================================== 

HTML代碼

<div class="loginRelative" id="secondDiv"><label class="loginText">Transport Management System</label> 
      <div class="logo-div"> 
      <div class="loginimageBgStyle"><img src="images/indexImg.png" /></div> 
      </div> 
      <div class="absoluteLeft"></div> 
      <div class="absoluteRight"></div><span id="loginForm:loginPanel"><div id="loginForm:messages" class="ui-messages ui-widget errorValidationStyle" aria-live="polite"></div> 

      <div class="controls loginTextbox" id="thirdDiv"><div id="loginForm:j_idt16:0:j_idt18" class="ui-outputpanel ui-widget"><input id="loginForm:j_idt16:0:username" name="loginForm:j_idt16:0:username" type="text" placeholder="User ID" class="ui-inputfield ui-inputtext ui-widget ui-state-default ui-corner-all" /><script id="loginForm:j_idt16:0:username_s" type="text/javascript">PrimeFaces.cw("InputText","widget_loginForm_j_idt16_0_username",{id:"loginForm:j_idt16:0:username",widgetVar:"widget_loginForm_j_idt16_0_username"});</script></div> 
      </div><div id="loginForm:j_idt16:0:j_idt20" aria-live="polite" class="ui-message ui-helper-hidden"></div><script id="loginForm:j_idt16:0:j_idt20_s" type="text/javascript">$(function(){PrimeFaces.cw("Message","widget_loginForm_j_idt16_0_j_idt20",{id:"loginForm:j_idt16:0:j_idt20",widgetVar:"widget_loginForm_j_idt16_0_j_idt20",target:"loginForm:j_idt16:0:username"});});</script> 

      <div class="controls loginPassword"><div id="loginForm:j_idt16:0:j_idt22" class="ui-outputpanel ui-widget"><input id="loginForm:j_idt16:0:password" name="loginForm:j_idt16:0:password" type="password" class="ui-inputfield ui-password ui-widget ui-state-default ui-corner-all" placeholder="******" /><script id="loginForm:j_idt16:0:password_s" type="text/javascript">$(function(){PrimeFaces.cw("Password","widget_loginForm_j_idt16_0_password",{id:"loginForm:j_idt16:0:password",widgetVar:"widget_loginForm_j_idt16_0_password"});});</script></div> 
          <!-- &lt;p:keyboard id="" value="" &gt; 

       &lt;/p:keyboard&gt; --> 
         </div><div id="loginForm:j_idt16:0:j_idt24" aria-live="polite" class="ui-message ui-helper-hidden"></div><script id="loginForm:j_idt16:0:j_idt24_s" type="text/javascript">$(function(){PrimeFaces.cw("Message","widget_loginForm_j_idt16_0_j_idt24",{id:"loginForm:j_idt16:0:j_idt24",widgetVar:"widget_loginForm_j_idt16_0_j_idt24",target:"loginForm:j_idt16:0:password"});});</script> 

      <div><a href="/forgotPassword" class="forgotPwdStyle">Forgot Password?</a> 
      </div> 

      <div class="loginBtnBgStyle"><button id="loginForm:j_idt28" name="loginForm:j_idt28" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only noBtnStyle" type="button"><span class="ui-button-icon-left ui-icon ui-c loginBtnImg"></span><span class="ui-button-text ui-c">ui-button</span></button><script id="loginForm:j_idt28_s" type="text/javascript">PrimeFaces.cw("CommandButton","widget_loginForm_j_idt28",{id:"loginForm:j_idt28",widgetVar:"widget_loginForm_j_idt28"});</script><button id="loginForm:loginButton" name="loginForm:loginButton" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only loginBtnStyle" onclick="return loginTms();;" type="button"><span class="ui-button-text ui-c">Login</span></button><script id="loginForm:loginButton_s" type="text/javascript">PrimeFaces.cw("CommandButton","widget_loginForm_loginButton",{id:"loginForm:loginButton",widgetVar:"widget_loginForm_loginButton"});</script> 
      </div></span><script type="text/javascript">loginTms = function() {PrimeFaces.ab({s:'loginForm:j_idt30',f:'loginForm',u:'loginForm',pa:arguments[0]});}</script> 

      <script> 
      function TMS_onLoginBtnClick(){ 

      //alert("localhostinnnn"); 
      var payroll = $("#payrollIframe").contents(); 
      payroll.find("#username").val(document.getElementById("loginForm:j_idt15:0:username").value); 
      payroll.find("#password").val(document.getElementById("loginForm:j_idt15:0:password").value); 
      payroll.find("#user_accounts")[0].submit(); 
      return false; 
      } 


      /** 
      This method will be called from payroll 
      iframe after success full login 
      */ 
      function loginSuccess(){ 
       //alert("logged in"); 
      //TODO: handle here 
       loginTms(); 
      } 

      function loginFail(){ 

      //TODO: handle here 
      } 
     </script> 
     <iframe id="payrollIframe" src="http://localhost/GOPayroll/?source=1" style="opacity:0; height:1px; width:1px;"> 
     </iframe> 

      <div class="logoutMsgStyle"> 

      </div> 


    </div> 
    </div> 
+0

你得到了什麼樣的例外?另外,你能提供你的HTML嗎? – JDelorean

+0

我沒有得到錯誤,但沒有得到期望的輸出 –

+0

首先,你在'Forgetpsw'和'Browsers'這兩個類中創建'WebDriver'。在執行'Browsers'類時,它的'Webdriver'會打開你的URL。然後控制權返回到'Forgetpsw'類,其中'WebDriver'尚未啓動,也未分配。在這種情況下,它不會點擊任何東西。考慮將'WebDriver'傳遞給'Initiating()'方法。 – JDelorean

回答

0

裏面你Initiating方法,你需要返回驅動程序對象並將其存儲在您的Forgetpsw類。

public void Initiating() throws IOException { 
    Properties prop= new Properties(); 
    InputStream fis = new FileInputStream("D:\\Workspace\\TMS\\selenium\\ZLive\\src\\datadriven.properties"); 
    prop.load(fis); 


    System.out.println("Initiating Browser"); 

    if (prop.getProperty("browser").equals("firefox")) 
    { 
     driver=new FirefoxDriver(); 
    } 
    else 
    { 
     System.setProperty("webdriver.chrome.driver", "D:\\selenium\\chromedriver_win32\\chromedriver.exe"); 
     driver = new ChromeDriver(); 
    } 
    driver.manage().window().maximize(); 
    driver.get(prop.getProperty("url")); 
    return driver; //return the driver object. 
} 

而且Browseropen方法是什麼樣子,

public void Browseropen() throws Exception { 
    Browsers startup=new Browsers(); 
    driver = startup.Initiating(); 
    } 
0

在您的起爆()方法,我只好返回,如驅動程序。

public WebDriver Initiating() throws IOException { 
    //your code 
    return driver 
} 

,並使用這

@BeforeTest 
public void Browseropen() throws Exception { 
    Browsers startup=new Browsers(); 
    this.driver = startup.Initiating(); //your declared driver will get the initialized driver. 
} 

希望這會幫助你返回驅動程序。