Microsoftの「UI test with Selenium」にあるサンプルが動かない2

# 0.はじめに
以前([Microsoftの「UI test with Selenium」にあるサンプルが動かない](https://qiita.com/piyo8810/items/2ac19bac26782a82500b))の続き。

# 1.調べたこと
以前の記事の最後にある、わからなかったことを調べた。
わからなかったことは、2点。

(1) コピってきたコードがよくわからない

```c#
executor.ExecuteScript("arguments[0].click();", element);
```
これの、arguments[0]ってのがイマイチよくわからない。
････
このarguments[0]っていうのは、Javascriptの話だった。
引数のことを言っているらしい。なので、arguments[0]ってのは、elementのこと。
一応、簡単なテストをやってみた。

```html:test.html
<html>
    <head>
        <title>テスト用HTML</title>
    </head>
    <body>
        <button type="button" onclick="alert('アラートメッセージ1')" id="test_element1">ボタン</button>
        <button type="button" onclick="alert('アラートメッセージ2')" id="test_element2">ボタン</button>
        <button type="button" onclick="alert('アラートメッセージ3')" id="test_element3">ボタン</button>
    </body>
</html>
```

```c#:ExecuteScriptTest
        [TestMethod]
        [TestCategory("Chrome")]
        public void ExecutorTest()
        {
            driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
            //
            // ローカルのテスト用HTMLにアクセス
            //
            driver.Navigate().GoToUrl("file:///C:..(略).../test.html");
            //
            // ボタン1
            //
            IWebElement element1 = driver.FindElement(By.Id("test_element1"));
            IJavaScriptExecutor executor = (IJavaScriptExecutor)driver;
            //
            // ボタン2
            //
            IWebElement element2 = driver.FindElement(By.Id("test_element2"));
            IJavaScriptExecutor executor2 = (IJavaScriptExecutor)driver;
            //
            // ボタン1を選択
            //
            executor.ExecuteScript("arguments[0].click();", element1, element2);
            //
            // アラート内容の確認
            //
            var alert = driver.SwitchTo().Alert();
            Assert.IsTrue(alert.Text.Equals("アラートメッセージ1"), "Verified message of the alert");
            //
            // アラートを閉じる
            //
            alert.Accept();
            //
            // ボタン2をクリック
            //
            executor.ExecuteScript("arguments[1].click();", element1, element2);
            //
            // アラート内容の確認
            //
            alert = driver.SwitchTo().Alert();
            Assert.IsTrue(alert.Text.Equals("アラートメッセージ2"), "Verified message of the alert");
            //
            // アラートを閉じる
            //
            alert.Accept();
        }
```

ExecuteScriptの引数を2つにしたら、arguments[0]には1つ目に引数が、arguments[1]には2つめの引数が入るってことだね。


(2) デバッグじゃないと成功しない
予想通りwaitかけたらうまくいった。

```c#
        [TestMethod]
        [TestCategory("Chrome")]
        public void TheBingSearchTest()
        {
            //
            // Bingのページを表示
            //
            driver.Navigate().GoToUrl(appURL + "/");
            //
            // 検索窓に「Azure Pipelines」と入力
            //
            driver.FindElement(By.Id("sb_form_q")).SendKeys("Azure Pipelines");
            //
            // 検索をクリック
            //
            IWebElement element = driver.FindElement(By.Id("sb_form_go"));
            IJavaScriptExecutor executor = (IJavaScriptExecutor)driver;
            executor.ExecuteScript("arguments[0].click();", element);
            //
            // タイトルに「Azure Pipelines」が入っているページのうち、
            // 検索結果の先頭にあるものを選択
            //
            var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 30));
            var findElement = wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(
                            By.XPath("//ol[@id='b_results']/li/h2/a[contains(text(), 'Microsoft Azure')]")));
            findElement.Click();
            //
            // ページのタイトルに「Azure Pipelines」が含まれていたらテスト成功
            //
            Assert.IsTrue(driver.Title.Contains("Azure Pipelines"), "Verified title of the page");
        }
```

ここにたどり着くまでにいろいろ調べて、ちょっとはだけSeleniumに慣れた気がする｡｡｡｡
あとはデザインパターンとかいろいろ勉強して、Azure DevOpsとかに組み込むとこまでやりたいな････