我在C#中编写selenium代码以与表单进行交互
这是提交按钮:
<input type="submit" value="Submit" onclick="return confirm('Submit?');" class="SubmitButton">
这是我单击提交按钮的Selenium代码。
IAlert alert = driver.SwitchTo().Alert();
alert.Accept();
然而,当我这样做时,没有点击'ok'按钮。相反,对话框消失,表单就像从未点击提交输入一样。我做错了什么?
答案 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);
});