2017-02-12 40 views
1

你好我試圖登錄到Skype的網站編程,但密碼字段不能由硒被發現。我使用的是硒的webdriver的框架,在C#中登錄到網站編程,並提交表單

String loginURL = "https://login.skype.com/login?message=signin_continue&client_id=360605&redirect_uri=https%3A%2F%2Fsecure.skype.com%2Fportal%2Flogin%3Freturn_url%3Dhttps%253A%252F%252Fsecure.skype.com"; 

IWebDriver driver = new FirefoxDriver(); 
     driver.Navigate().GoToUrl(loginURL); 
     IWebElement usrElement = driver.FindElement(By.Id("username")); 
     usrElement.Clear(); 
     usrElement.Click(); 
     usrElement.SendKeys(usr); 
     IWebElement nextBtnElement = driver.FindElement(By.Id("signIn")); 
     nextBtnElement.Click(); 

這個工程,並進入自己的用戶名入禁區,但是當它到達下一個字段(密碼字段)硒找不到輸入格式ID這在我的瀏覽器源代檢查員聲稱它是「i0118」。我也嘗試將ID設置爲「密碼」,並將其命名爲「passwd」,但沒有運氣。爲什麼我可以在瀏覽器檢查器上將它看作「i0118」,但即使我們使用的是相同的Firefox可執行文件,我的驅動程序對象也無法使用?

這裏是我的瀏覽器檢查想出了

<input name="passwd" id="i0118" autocomplete="off" class="form-control" aria-describedby="passwordError passwordDesc" data-bind=" 
       textInput: password, 
       hasFocusEx: isFocused, 
       placeholder: $placeholderText, 
       ariaLabel: str['CT_PWD_STR_PwdTB_Label'], 
       attr: { maxLength: svr.C ? 127 : null }, 
       css: { 'has-error': error }" aria-label="Password" maxlength="127" type="password"> 
+0

是否有可能讓你得到什麼的webdriver是看到的輸出? Javascript可能不可用 - 登錄表單需要它。 –

+0

是的,當我開始調試我的程序時,它實際上啓動了firefox可執行文件,我確切地知道它在前端做了什麼,並且可以檢查這些元素等等。 –

+0

我可以將當​​前頁面源文件寫入文件是的,它似乎不同於屏幕上的內容,當硒自動化的東西是奇怪的,不應該是相同的嗎? –

回答

2

這是因爲密碼字段(ID i0118)是動態加載(例如,通過AJAX)你輸入用戶名(之後完成的HTML代碼首先驗證用戶名是否存在),這可能會導致Selenium出現問題。

你可以做的就是在輸入用戶名並單擊按鈕後運行一個定時器功能,該按鈕每200毫秒運行一次並檢查是否存在密碼字段,該字段將在Skype中的內部AJAX功能如果文本「That Microsoft account does not exist」(當用戶名不存在時顯示在Skype登錄頁面中),那麼還會檢查每次定時調用函數的登錄頁面是否完成,在頁面中找到,以在屏幕上顯示警告,指示用戶名無效。

+0

我告訴我的程序等待2秒鐘,然後它工作!感謝你們兩位的幫助!那是流血天才。 –

+0

沒有probs :)但是,最好如果您使用定時自我調用(即遞歸)函數來測試密碼字段的存在。如果您不使用它,而是使用2秒的延遲,並且出於某種原因,Skype網站中的AJAX請求需要的時間超過了(它會),則登錄將自動失敗。 – ablopez

+0

這是一個聰明的想法 –