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を挟んでいます。)

Microsoft Edgeを起動するC#コード前のページ

[Windows 10]UWPアプリでWebViewコントロールを使ってみた。次のページ

関連記事

  1. Office関連

    IEサポート終了でVBAマクロはどうなるの?

    ※下記情報は2021年5月時点の情報で、今後状況が変わっていく可能性が…

  2. Excel

    IEサポート終了でVBAマクロはどうなるの?(2)

    ※下記情報は2021年5月時点の情報で、今後状況が変わっていく可能性が…

  3. Windows関連

    Windows コマンド ライン リファレンス

    未だに出番がなにかと多いコマンドライン、コマンド名やオプションを忘れて…

  4. Windows関連

    どのブラウザーが最強なのかを調べてみたよ。

    Internet Explorer、Chrome、Firefox…数あ…

コメント

  • コメント (0)

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

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

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP