当ブログでも最近よく扱っている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を挟んでいます。)


















この記事へのコメントはありません。