web-dev-qa-db-ja.com

Selenium c#は確認ボックスを受け入れます

私はc#でSeleniumを使用してnUnitテストを作成しました。

JS確認ボックスを確認するまで、すべて順調でした。

これが私が使用しているコードです:

this.driver.FindElement(By.Id("submitButton")).Click();
this.driver.SwitchTo().Alert().Accept();

送信ボタンの後に確認ボックスが表示されます。確認が表示され、すぐに消えますが、フォームは送信されません。上記のaccept()行に関係なく、動作は同じです。

Firefoxv15.0.1とSeleniumv2.24を使用しています

送信クリックと確認承認の間にThread.Sleepを配置してみました。

私が読んだすべてのことは、Seleniumドライバーが自動的に確認OKを送信すると言っていますが、何か他のことが起こっているようです。

12
Tim Jarvis

この問題では、確認ボックスの存在を確認しようとします。それは次のようなものです:

this.driver.FindElement(By.Id("submitButton")).Click();


 boolean presentFlag = false;

  try {

   // Check the presence of alert
   Alert alert = driver.switchTo().alert();
   // Alert present; set the flag
   presentFlag = true;
   // if present consume the alert
   alert.accept();

  } catch (NoAlertPresentException ex) {
   // Alert not present
   ex.printStackTrace();
  }

  return presentFlag;

 }

その後、動作しない場合。ステップバイステップでデバッグしてみてください。 Seleniumでのアラート(確認ボックス)ハンドルに関するいくつかの追加情報 ここ これが何らかの形で役立つことを願っています

13

必要なのは:

 IAlert alert = driver.SwitchTo().Alert();
 alert.Accept();
8
Danny

私がテストしているエンドポイントには信頼できる応答時間がありません。Firefoxを使用してWebドライバーSelenium-dotnet-2.33.0(.NET4)で常に動作させる唯一の方法は、次の手順を実行することでした。

private void acceptAlert(){
string alertText = "";
IAlert alert = null;
while (alertText.Equals("")){
if (alert == null)
{
try{
alert = driver.SwitchTo().Alert();
}
catch{ 
System.Threading.Thread.Sleep(50); }
}
else{
try{
alert.Accept();
alertText = alert.Text;
}
catch (Exception ex){
if (ex.Message.Equals("No alert is present")) alertText = "Already Accepted";
else System.Threading.Thread.Sleep(50);
}
}
}
}