只是想补充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);
你会如何在C#代码中做到这一点? – jsmith 2012-04-10 17:39:41
SendKeys.Send(“{ENTER}”);只要确保应用程序在运行时处于活动状态,它应该关闭警报窗口或确认确认JavaScript,如果情况属实......反对者会讨厌,但我们有一个巨大的通用Web测试器应用程序,就像那样工作... – Sweet 2012-04-10 18:00:37
我试着添加alert.SendKeys(“ENTER”);并没有工作 – jsmith 2012-04-10 18:04:57