12

C# でセレンを使用して nUnit テストを作成しました。

JS確認ボックスを確認する必要があるまで、すべてがうまくいっていました.

ここに私が使用しているコードがあります:

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

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

Firefox v15.0.1 とセレン v2.24 を使用しています

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

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

4

3 に答える 3

15

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

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;

 }

うまくいかない場合。段階的にデバッグしてみてください。アラートに関するいくつかの追加情報 (ボックスの確認)ここでのセレンの処理は、 これが何らかの形で役立つことを願っています

于 2012-10-05T11:11:41.783 に答える
9

あなただけが必要です:

 IAlert alert = driver.SwitchTo().Alert();
 alert.Accept();
于 2013-11-21T05:43:19.350 に答える
1

私がテストしているエンドポイントには信頼できる応答時間がなく、Firefox を使用して webdriver 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);
}
}
}
}
于 2013-06-03T08:49:00.963 に答える