2017-02-22 85 views
0

我的代碼隱式等待效果很好。但是我讀了關於等待和理解的信息,我需要明確地等待我的項目。這就是爲什麼我試圖用它來實現我的測試項目。 當我的轉移力的步驟equel點擊按鈕,我有錯誤:http://joxi.ru/BA0GMyDhnY0n2y 請幫助我。WebDriver:顯式等待不工作通過點擊元素

基類:

using NUnit.Framework; 
using System; 
using LinkedinAddContacts.Pages; 
using LinkedinAddContacts.TestData; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 
using OpenQA.Selenium.Support.UI; 

namespace LinkedinAddContacts 
{ 
    [TestFixture] 
    public class TestClass 
    { 
     private IWebDriver webDriver; 
     private WebDriverWait waitDriver; 

     [SetUp] 
     public void InitializeBrowser() 
     { 
      webDriver = new ChromeDriver(); 
      waitDriver = new WebDriverWait(webDriver, TimeSpan.FromSeconds(10)); 
      webDriver.Manage().Window.Maximize(); 
      webDriver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(30); 
      webDriver.Navigate().GoToUrl("https://www.linkedin.com/"); 
     } 
     [Test] 
     public void TestMethod() 
     { 
      Authorization authorizationData = new Authorization(); 
      StartPage objStartPage = new StartPage(waitDriver); 
      NetworkPage objNetworkPage = new NetworkPage(waitDriver); 

      objStartPage.EntrySystem(authorizationData); 
      objNetworkPage.ConnectPeople(); 
     } 

     [TearDown] 
     public void CloseBrowser() 
     { 
      webDriver.Quit(); 
     } 
    } 
} 

二級類:

using NUnit.Framework; 
using LinkedinAddContacts.TestData; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Support.UI; 

namespace LinkedinAddContacts.Pages 
{ 
    public class StartPage 
    { 
     // private IWebDriver webDriver; 
     private WebDriverWait waitDriver; 
     #region Objects 

     public StartPage(WebDriverWait waitDriver) 
     { 
      this.waitDriver = waitDriver; 
     } 

     private IWebElement EmailInput 
     { 
      get 
      { 
       return waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.Name("session_key"))); 
       //return webDriver.FindElement(By.Name("session_key")); 
      } 
     } 

     private IWebElement PasswordInput 
     { 
      get 
      { 
       return waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.Name("session_password"))); 
       // return webDriver.FindElement(By.Name("session_password")); 
      } 
     } 

     private IWebElement LoginButton 
     { 
      get 
      { 
       return waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.Name("login-submit"))); 
       //return webDriver.FindElement(By.Id("login-submit")); 
      } 
     } 

     private IWebElement RegistrationForm 
     { 
      get 
      { 
       return waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.Id("regForm"))); 
      // return webDriver.FindElement(By.Id("regForm")); 
      } 
     } 
     #endregion 
     #region Methods 
     public void CloseRegistrationForm() 
     { 
      IJavaScriptExecutor js = waitDriver as IJavaScriptExecutor; 
      js.ExecuteScript("document.getElementById('regForm').style.display = 'none';"); 
      // ((IJavascriptExecutor)driver).executeScript("scroll(0,400)"); 

     } 


     public void EntrySystem(Authorization authorizationData) 
     { 
      // CloseRegistrationForm(); 
      EmailInput.SendKeys(authorizationData.Email); 
      PasswordInput.SendKeys(authorizationData.Password); 
      LoginButton.Click(); 
     } 
     #endregion 
    } 
} 

錯誤有:

public void EntrySystem(Authorization authorizationData) 
    { 
     // CloseRegistrationForm(); 
     EmailInput.SendKeys(authorizationData.Email); 
     PasswordInput.SendKeys(authorizationData.Password); 
     LoginButton.Click(); 
    } 

回答

0

當我的理解正確你的代碼崩潰這一行:

return waitDriver.Until(ExpectedConditions.ElementToBeClickable(By.Name("login-submit"))); 

現在,查看linkedIn的起始頁面,顯示login-submit按鈕沒有定義名稱屬性,但可以使用它的id。

<input tabindex="1" id="login-submit" class="login submit-button" type="submit" value="Einloggen"> 

所以,你應該使用By.id()代替By.name()

+0

OMG!這是我的故事。 +10對你的業力,善良的人。 – s3ngeeer

0

重要的是要注意你使用哪個網頁驅動程序。首先,As @Robert表示,只要ID可用,最好用Id找到。

其次,我認爲LoginButton.Click()不起作用。我有鉻驅動程序這樣的問題。當頁面縮放(縮放)發生變化時,Click方法無法正常工作,或在頁面上的其他位置點擊。

我建議您使用SendKeys進行任何點擊操作。 就像這樣:

LoginButton.SendKeys(Keys.Enter);// or Keys.Return 

永遠不要點擊方法

+0

謝謝你的建議,我把它用於我的技能。我沒有在任何地方談論它。 – s3ngeeer

+0

你的建議可以幫助我在另一個項目。我更多的一個星期遇到了無法點擊的按鈕。再次感謝 – s3ngeeer

+0

分享經驗幫助了我很多。 不客氣 – Efe

相關問題