5

フォームと対話するためにC#でセレンコードを書いています

これは送信ボタンです。

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

これは、送信ボタンをクリックするための私の Selenium コードです。

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

それでも、「OK」ボタンはクリックされません。代わりに、ダイアログ ボックスが消え、送信入力がクリックされなかったかのようにフォームが動作します。私は何を間違っていますか?

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

少なくとも InternetExplorerWebDriver では機能しないことを追加したかったIAlert alert = driver.SwitchTo().Alert();のは、js cofirm アラートが起動するとすべてがブロックされ、c# で次のコード行を実行することさえできないためです。

私がしなければならなかったのは、実際に別のスレッドで確認ポップアップを実行してC#バックエンドでコントロールを解放し、コードの次の行を実行できるようにすることです。 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 に答える
0

ダイアログが画面から消えている場合。これは、アラートが抑制されていることを意味します。次のコードを使用できます。

DesiredCapabilities ieCapabilities = DesiredCapabilities.internetExplorer();

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

WebDriver driver = new InternetExplorerDriver(ieCapabilities);
于 2013-05-10T12:14:22.647 に答える