Windows 10

Selenium(C#)でEdgeをいろいろ操作してみた。

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

関連記事

  1. Windows関連

    [Windows 8]ログオン時にデスクトップを表示する。

    通常Windows 8はログオン時にスタートスクリーンが表示されますが…

  2. Windows関連

    [Windows 8]シャットダウンはどこ?

    2012/03/01 追記:Windows 8 Consumer Pr…

  3. Windows 10

    Microsoft Edgeを起動するC#コード

    以前書いた記事「「ファイル名を指定して実行」からMicrosoft E…

  4. Windows 10

    WebDriverを使わずMicrosoft Edgeを制御するC#コード

    以前書いた記事のように、Microsoft EdgeにはInterne…

  5. Windows 10

    【2017年4月版】Microsoft Edgeで開いているページを名前を付けて保存する方法

    2015年8月に、Microsoft Edgeで開いているページを名前…

  6. Windows 10

    「ファイル名を指定して実行」からMicrosoft Edgeを起動する

    以前書いた記事で、Microsoft EdgeをVBScriptから起…

コメント

  • コメント (0)

  • トラックバックは利用できません。

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP