![](/img/trans.png)
[英]How to handle Save As dialogue box of firefox in Selenium usng C#?
[英]How to click javascript confirm dialogue box with selenium webdriver in C#
我在 C# 中編寫 selenium 代碼來與表單交互
這是提交按鈕:
<input type="submit" value="Submit" onclick="return confirm('Submit?');" class="SubmitButton">
這是我的 Selenium 代碼,用於單擊提交按鈕。
IAlert alert = driver.SwitchTo().Alert();
alert.Accept();
然而,當我這樣做時,沒有點擊“確定”按鈕。 取而代之的是,對話框消失了,表單就好像提交輸入從未被點擊過一樣。 我究竟做錯了什么?
我不知道為什么你的代碼不起作用(我的版本特定),它對我來說工作正常。
IAlert alert = driver.SwitchTo().Alert();
alert.Accept();
任何方式,你也可以這樣做,
SendKeys.SendWait("{ENTER}");
但在執行此操作之前,請確保在您的項目參考中添加“ System.Windows.Forms.dll ”,並確保您的應用程序在運行時處於活動狀態,這意味着當彈出窗口出現時不要點擊其他 window 並且不要讓您的計算機成為睡覺。
這很丑但是...我做什么我強制輸入警報和確認的回車鍵
如果對話框從屏幕上消失。 這意味着警報正在被抑制。 您可以使用以下代碼:
DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();
ieCapabilities.setCapability("unexpectedAlertBehaviour", "ignore");
WebDriver driver = new InternetExplorerDriver(ieCapabilities);
只是想添加IAlert alert = driver.SwitchTo().Alert();
至少在 Inte.netExplorerWebDriver 中不起作用,這可能是因為 js 確認警報一旦啟動就會阻止所有內容,您甚至無法執行 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 });
}
}
然后在測試或頁面 Object Model
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.