当ブログでも最近よく扱っているMicrosoft Edge、Seleniumからいろいろ操作してみました。
using System; using System.Drawing.Imaging; using System.Windows.Automation; using OpenQA.Selenium; using OpenQA.Selenium.Edge; using OpenQA.Selenium.Support.UI; using OpenQA.Selenium.Support.Events; namespace EdgeWebDriver { class Program { public static void Main(string[] args) { const string folderName = "Microsoft Web Driver"; string serverPath = System.IO.Path.Combine( System.Environment.GetFolderPath( System.Environment.SpecialFolder.ProgramFilesX86 ), folderName ); EventFiringWebDriver driver = new EventFiringWebDriver(new EdgeDriver(serverPath)); driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); //driver.Manage().Window.Maximize(); //OpenQA.Selenium.WebDriverException: Unexpected error. Unknown command received //maximize edge window driver.Navigate().GoToUrl("about:blank"); AutomationElement root = AutomationElement.RootElement; AutomationElement edge = root.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "TitleBar")); if (edge != null) { AutomationElement maximize = edge.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "Maximize")); if (maximize != null) { if (maximize.Current.Name.Contains("最大化")) { InvokePattern ivk = (InvokePattern)maximize.GetCurrentPattern(InvokePattern.Pattern); ivk.Invoke(); } } } WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); driver.Navigated += new EventHandler<WebDriverNavigationEventArgs>(driver_Navigated); driver.Navigate().GoToUrl("http://deelay.me/3000/http://www.bing.com/search?q=windows10"); wait.Until(x => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete")); ((ITakesScreenshot)driver).GetScreenshot() .SaveAsFile(@"C:\Test\" + new Uri(driver.Url).Host + ".jpg", ImageFormat.Jpeg); Console.WriteLine("=== document complete ==="); driver.Navigate().GoToUrl("http://deelay.me/3000/http://search.yahoo.co.jp/search?p=windows10"); wait.Until(x => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete")); ((ITakesScreenshot)driver).GetScreenshot() .SaveAsFile(@"C:\Test\" + new Uri(driver.Url).Host + ".jpg", ImageFormat.Jpeg); Console.WriteLine("=== document complete ==="); driver.Quit(); } private static void driver_Navigated(object sender, WebDriverNavigationEventArgs e) { Console.WriteLine("URL:" + e.Url); } } }
Navigatedイベントでページ遷移を捕まえたり、GetScreenshotメソッドでスクリーンショットを撮ったり、基本的な動作を確認してみたのですが、IWindow.Maximizeメソッドを実行したところ、Unexpected errorが発生したので、仕方なくUI Automationを使うことにしました。
EdgeのWebDriver Statusを見る限り、現時点(2015/8/28)ではMaximize WindowがNot Yetになっているので、まだ実装されていないのかもしれません。同じように、SelectElementを使おうとした際にもエラーが発生したので、Edge用のWebDriverはまだまだ開発途上のようです。
ちなみに、ページの表示待ち処理は「load – Selenium wait until document is ready」を参考にしてみました。
(動作確認するためにDeelay.meを挟んでいます。)
この記事へのコメントはありません。