2017-02-12 19 views
1

こんにちは私はSkypeのサイトにプログラムでログインしようとしていますが、パスワードフィールドはセレンでは見つかりません。私はC#でセレンのwebdriverをフレームワークを使用していプログラムでウェブサイトにログインし、フォームを送信

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実行ファイルを使用していても、ドライバオブジェクトは表示できません。あなたは、ユーザー名を入力した後(ID i0118付き)パスワードフィールド(例えばAJAXを経由して)動的にロードされているので、ここで

が行われる(だ私のブラウザの検査官が

<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

はい、プログラムのデバッグを開始すると、実際には実行可能ファイルが起動され、フロントエンドで何が実行されているかを正確に確認し、要素などを検査できます。 –

+0

私は現在のページソースをファイルに書き込むことができますはい、それはセレンが奇妙なものを自動化しているときに画面上に表示されているものとは異なるようですが、同じではないでしょうか? –

答えて

2

を思い付くhtmlコードです最初にユーザー名が存在することを確認するため)、おそらくSeleniumに問題が発生している可能性があります。

あなたができることは、ユーザ名を入力してボタンをクリックするとすぐにタイマー機能を実行し、200ミリ秒ごとに実行され、Skypeの内部AJAX機能がロードされるとパスワードフィールドが存在するかどうかを確認します「そのMicrosoftアカウントが存在しません」というテキスト(ユーザー名が存在しないときにSkypeのログインページで表示される)が表示されている場合は、タイムアウトした各コールをチェックインしながら、ページにユーザー名が無効であることを示すアラートが画面に表示されます。

+0

私は2秒待つように私のプログラムに言った、そしてそれは働いた!お二人に助けてくれてありがとう!それはブリディンの天才だった。 –

+0

probs :)しかし、パスワードフィールドの存在をテストするために時間指定の自己呼び出し(すなわち再帰的)関数を使用するのが最善です。あなたがそれを使用せず、代わりに2秒の遅延を使用し、何らかの理由でSkypeサイトのAJAXリクエストがそれ以上の時間を要した場合、ログインは黙って失敗します。 – ablopez

+0

これは賢明な考えです –

関連する問題