2012-04-10 59 views
4

我写硒代码在C#与形式如何单击C#与硒的webdriver JavaScript的confirm对话框

互动这是提交按钮:

<input type="submit" value="Submit" onclick="return confirm('Submit?');" class="SubmitButton"> 

这是我的硒代码点击提交按钮。

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

但是,当我这样做,'确定'按钮不会被点击。相反,对话框消失,表单就像提交输入从未被点击一样。我究竟做错了什么?

回答

0

这是丑陋的,但...我做什么我强迫警报的输入键和确认

+0

你会如何在C#代码中做到这一点? – jsmith 2012-04-10 17:39:41

+0

SendKeys.Send(“{ENTER}”);只要确保应用程序在运行时处于活动状态,它应该关闭警报窗口或确认确认JavaScript,如果情况属实......反对者会讨厌,但我们有一个巨大的通用Web测试器应用程序,就像那样工作... – Sweet 2012-04-10 18:00:37

+0

我试着添加alert.SendKeys(“ENTER”);并没有工作 – jsmith 2012-04-10 18:04:57

0

如果对话框从屏幕上消失。这意味着警报正在被抑制。您可以使用以下代码:

DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer(); 

ieCapabilities.setCapability("unexpectedAlertBehaviour", "ignore"); 

WebDriver driver = new InternetExplorerDriver(ieCapabilities); 
+0

这只能用于远程网络驱动程序,而你的答案让我困惑 – IronHide 2016-09-14 08:04:25

3

我不知道为什么你的代码不工作(我的版本特定),它的工作适合我。

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

的任何方面,你能做到这样也

SendKeys.SendWait("{ENTER}"); 

但在此之前这样做,确保“System.Windows.Forms.dll的”在您的项目引用添加,也使确保您的应用程序在运行时处于活动状态,意味着在出现弹出窗口时不要单击其他窗口,也不要让您的计算机进入睡眠状态。

+0

这对我在IE – IronHide 2016-09-14 08:48:44

+0

中的工作只是想添加IAlert alert = driver.SwitchTo()。Alert();至少在InternetExplorerWebDriver中不起作用,这可能是因为js cofirm警报一旦启动封锁所有内容,甚至无法执行c#中的下一行代码,这很奇怪。 – IronHide 2016-09-15 10:09:37

0

只是想补充IAlert alert = driver.SwitchTo().Alert();不起作用,至少在InternetExplorerWebDriver这可能是因为js cofirm警报一旦启动封锁一切,你甚至不能执行c#中的下一行代码是奇怪的。

我只需要在单独的线程中执行确认弹出窗口来释放c#后端中的控件,以便可以执行下一行代码,并且必须在Thread.Sleep(1000)之前和之后发送键确保JS依然没有阻挡

所以我的代码看起来是这样的谎言:

public class MyThread 
     { 
      public IWebDriver driver; 
      public NgWebElement element; 

      public MyThread(IWebDriver _driver, NgWebElement _el) 
      { 
       driver = _driver; 
       element= _el; 

      } 

      public void RunMe() 
      { 
       AsyncJavaScriptExecutor asyncJavaScriptExecutor = new AsyncJavaScriptExecutor(driver as IJavaScriptExecutor); 

       asyncJavaScriptExecutor.ExecuteScript("arguments[0].click(); callback();", new object[] { element }); 
      } 
     } 

,然后在测试或页面对象模型

MyThread mthread = new MyThread(_driver, element); 
      Thread oThread = new Thread(new ThreadStart(mthread.RunMe)); 
      oThread.Start(); 

      while (!oThread.IsAlive){} 


      //need to sleep beore and afer sending keys to makes sure js is not blicking events 
      Thread.Sleep(1000); 

      oThread.Abort(); 

      SendKeys.SendWait("{ENTER}"); 

      Thread.Sleep(1000);