簡體   English   中英

C#中selenium webdriver如何點擊javascript確認對話框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM