5

我正在用 C# 编写 selenium 代码以与表单交互

这是提交按钮:

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

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

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

然而,当我这样做时,没有单击“确定”按钮。相反,对话框消失了,表单就像提交输入从未被点击过一样。我究竟做错了什么?

4

4 回答 4

3

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

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

任何方式,你也可以这样做,

SendKeys.SendWait("{ENTER}");

但在执行此操作之前,请确保在您的项目引用中添加“ System.Windows.Forms.dll ”,并确保您的应用程序在运行时处于活动状态,这意味着当弹出窗口出现时不要点击其他窗口并且不要让您的计算机睡觉。

于 2016-06-08T06:46:43.857 回答
0

它很丑但是......我做什么我强制输入键以发出警报并确认

于 2012-04-10T17:37:42.637 回答
0

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

DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();

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

WebDriver driver = new InternetExplorerDriver(ieCapabilities);
于 2013-05-10T12:14:22.647 回答
0

只是想补充一点IAlert alert = driver.SwitchTo().Alert();,至少在 InternetExplorerWebDriver 中不起作用,这可能是因为 js cofirm alert 一旦启动就会阻止一切,你甚至无法在 c# 中执行下一行代码,这很奇怪。

我必须做的是在一个单独的线程中实际执行确认弹出窗口以释放 c# 后端中的控制,以便可以执行下一行代码,并且还必须在发送密钥之前和之前执行 Thread.Sleep(1000) make确定 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);
于 2016-09-15T10:17:59.380 回答