如何在C#中用selenium webdriver点击javascript确认对话框

时间:2012-04-10 17:34:21

标签: c# javascript asp.net visual-studio-2010 selenium

我在C#中编写selenium代码以与表单进行交互

这是提交按钮:

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

这是我单击提交按钮的Selenium代码。

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

然而,当我这样做时,没有点击'ok'按钮。相反,对话框消失,表单就像从未点击提交输入一样。我做错了什么?

4 个答案:

答案 0 :(得分:3)

我不知道为什么你的代码没有工作(我的版本是特定的),它对我来说很好。

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

无论如何,你也可以这样做,

SendKeys.SendWait("{ENTER}");

但在此之前请确保&#34; System.Windows.Forms.dll &#34;已添加到您的项目参考中,并确保您的应用在运行时处于活动状态,表示在弹出窗口时不要点击其他窗口,并且不要让您的计算机进入睡眠状态。

答案 1 :(得分:0)

这很难看但是......我做的是强制输入密钥进行提醒并确认

答案 2 :(得分:0)

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

DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();

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

WebDriver driver = new InternetExplorerDriver(ieCapabilities);

答案 3 :(得分:0)

只是想补充说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 }); } } 至少在InternetExplorerWebDriver中不起作用,这可能是因为js cofirm alert一旦启动阻止了所有内容,你甚至无法在c#中执行下一行代码,这很奇怪。

我必须做的是在一个单独的线程中实际执行确认弹出窗口以释放c#后端中的控件,以便下一行代码可以被执行,并且在发送之后和之前也必须使用Thread.Sleep(1000)密钥以确保js仍未阻止

所以我的代码看起来就像这样:

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);

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

var numbers = [4, 9, 16, 25];
function myFunction() {
numbers.forEach(function(val){ 
if(index!=2)
alert('val: '+val);
});