[135] [DFN[WebDriver]] は、
[[Webブラウザー]]を操作する [[Web API]] です。
[[利用者]]にかわって[[利用者インターフェイス]]を操作したり、
[[閲覧文脈]]に表示中の [[Webページ]]の [[DOM]] にアクセスしたりできます。

* 仕様書

[REFS[
- [30] [CITE@en[WebDriver]] ([TIME[2016-04-26 08:11:40 +09:00]] 版) <https://w3c.github.io/webdriver/webdriver-spec.html>
]REFS]

* プロトコル

[FIG(short list)[ [145] [[WebDriver]] [[エンドポイント]]
- [[Get All Cookies]]
- [[Get Named Cookie]]
- [[Get Window Rect]]
- [[Set Window Rect]]
- [[Switch To Frame]]
]FIG]

* WebDriver の実装

[35] [[サーバー]]側:
[FIG(short list)[
- [[Selenium]]
- [[ChromeDriver]]
- [[GeckoDriver]]
-- [[Marionette]]
]FIG]

[36] [[クライアント]]は、世間では  [[Selenium]] と[[言語]]依存の専用の[[クライアントライブラリー]]を使うことが多いですが、
[[WebDriver]] は単なる [[Web API]] なので、普通の [[HTTP]]
用[[ライブラリー]]があれば利用できます。

;; [37] しかし定型処理がわずらわしくなりますから、素の [[HTTP]] のまま操作するよりは、
ある程度[[抽象化]]された[[クライアントライブラリー]]は欲しいですね。

* 非互換性

[38] 色々な [[WebDriver]] の実装は、似て非なる[[プロトコル]]を使っています。

[39] [[Selenium]] のサーバーでは[[パス]]の先頭に [CODE[/wd/hub]] が付きます。
[[ChromeDriver]] や [[GeckoDriver]] では[[パス]]全体が [[WebDriver]]
仕様のものと解釈されます。

[40] [[WebDriver]] 仕様上は [[HTTP状態符号]]で正常かエラーかを表しますが、
[[ChromeDriver]] は基本的に [CODE[200]] を使います。
[[応答本体]]の [[JSON]] の [CODE[status]] が [N[0]] なら成功、
それ以外なら何らかのエラーです。
[CODE[value]] が [[JSONオブジェクト]]となり、その [CODE[message]]
に[[人間]]向けのエラーメッセージが入ります。
[TIME[2016-08-12T11:10:35.000Z]]

[43] [[WebDriver]] 仕様では[[スクリプト]]の実行は [CODE[/session/{session_id}/execute/sync]]
となっていますが、 [[ChromeDriver]] では [CODE[/session/{session_id}/execute]] です。

[42] [[ChromeDriver]] では [CODE[/status]] を [CODE[GET]] すると[[ビルド環境]]の情報が得られます。

[103] 各[[エンドポイント]]の項も参照。


[151] 
[[Web互換性]]には最新の注意を払う[[Webブラウザー事業者]]諸君、どうして [[WebDriver]]
だと平気で[[非互換変更]]しちゃうんだろうねえ。。。


* 用途

[FIG(list)[ [70] [[WebDriver]] を使った [[Webブラウザー]]操作の利用例
- [71] [[Webアプリケーション]]の[[テスト]]
- [75] [[Webブラウザー]]の[[テスト]]
- [72] [[スクレイピング]]
- [76] [[Webアプリケーション]]の定型操作
- [73] [[Webページ]]の[[スクリーンショット]]撮影
- [74] [[画像処理]]や [[3D]] や[[音声]]の汎用処理ツールとしての [[Webブラウザー]]の流用
]FIG]

* 実装

[143] [[Chrome]] は、[[WebDriver]] による操作中、
[[アドレスバー]]下の情報バーに
「Chrome is being controlled by automated software.」とその旨を表示します。
セッション作成時に
[CODE[chromeOptions]]
に
[CODE["[[excludeSwitches]]": ["enable-automation"] ]]
と指定して抑制できますが、
今度は
「Disable developer mode extensions」
というメッセージがオーバーレイ表示されるようになりますw

[146] 
[[要求本体]]には[[JSON]]を指定しますが、
[[ChromeDriver]]
も
[[GeckoDriver]]
も
[CODE[Content-Type]]
なしでも受け付けてくれるようにみえます。



[147] 
[[GeckoDriver]]
は存在しないコマンドを送信されたエラーを返した後、
不完全な形で[[HTTP接続]]を閉じることがよくある(が必ずではない)ようです。
[[クライアント]]側に[[TCP]]が閉じられたことが伝わらず、
[[クライアント]]がまだ接続が生きていると思って次の[[HTTP要求]]を送信すると、
(おそらく [CODE[RST]] が送られて) 
[[broken pipe]] ([CODE[EPIPE]]) エラーになるという感じです。
[TIME[2022-04-25T06:20:53.900Z]]

[148] 
>>147 パケットキャプチャーして調べたわけではないので
[[GeckoDriver]]
側の [CODE[RST]] ではなくクライアントの [[OS]] から[[アプリケーション]]に接続が閉じられたのが伝わっていないのに [CODE[write]] してエラーになってるのかもしれないけど。
どっちにしても接続が異常に閉じられてはいるようだし、
[[ChromeDriver]] や一般のサーバーではこんなことにはならないので。。。


* [CODE[navigator.webdriver]]

[150] [[Chrome]] は [CODE[--headless]] 付きで起動すると
[CODE[navigator.webdriver]]
を[[真]]にします。

* 歴史

[149] [CITE[最速インターフェース研究会 :: Firefoxの拡張MozLabの中に含まれるMozReplがヤバすぎる件について]], 
2006-09-28 00:48,
[TIME[2022-06-13T09:38:21.000Z]] <http://la.ma.la/blog/diary_200609280045.htm>


[1] [CITE[JsonWireProtocol - selenium - A description of the protocol used by WebDriver to communicate with remote instances - Browser automation framework - Google Project Hosting]]
( ([TIME[2011-12-10 10:05:47 +09:00]] 版))
<http://code.google.com/p/selenium/wiki/JsonWireProtocol>

[33] [CITE[JsonWireProtocol - selenium - A description of the protocol used by WebDriver to communicate with remote instances - Browser automation framework - Google Project Hosting]] ([TIME[2016-08-07 23:39:48 +09:00]]) <https://web.archive.org/web/20160205035909/https://code.google.com/p/selenium/wiki/JsonWireProtocol>

[2] [CITE@en[WebDriver]]
( ([TIME[2012-07-09 22:55:39 +09:00]] 版))
<http://www.w3.org/TR/2012/WD-webdriver-20120710/>

[3] [CITE@en[WebDriver]]
( ([TIME[2013-01-16 16:15:31 +09:00]] 版))
<http://www.w3.org/TR/2013/WD-webdriver-20130117/>

[4] [CITE@en[WebDriver]]
( ([TIME[2013-03-07 22:44:44 +09:00]] 版))
<http://www.w3.org/TR/2013/WD-webdriver-20130312/>

[5] [CITE[JsonWireProtocol - selenium - A description of the protocol used by WebDriver to communicate with remote instances - Browser automation framework - Google Project Hosting]]
( ([TIME[2013-10-22 02:13:24 +09:00]] 版))
<https://code.google.com/p/selenium/wiki/JsonWireProtocol>

[6] [CITE[JsonWireProtocol - selenium - A description of the protocol used by WebDriver to communicate with remote instances - Browser automation framework - Google Project Hosting]]
( ([TIME[2014-10-30 06:27:12 +09:00]] 版))
<https://code.google.com/p/selenium/wiki/JsonWireProtocol#Capabilities_JSON_Object>

[7] [CITE@en[WebDriver]]
( ([TIME[2014-11-07 11:04:46 +09:00]] 版))
<https://dvcs.w3.org/hg/webdriver/raw-file/default/webdriver-spec.html>

[8] [CITE[Selenium WebDriver — Selenium Documentation]]
( ([TIME[2015-01-13 13:08:11 +09:00]] 版))
<http://docs.seleniumhq.org/docs/03_webdriver.jsp>

[9] [CITE@en[The Architecture of Open Source Applications: Selenium WebDriver]]
( ([TIME[2013-02-05 12:26:15 +09:00]] 版))
<http://www.aosabook.org/en/selenium.html>

[10] [CITE@en[WebDriver]]
([TIME[2015-08-03 16:17:27 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20150803/>

[11] [CITE@en[WebDriver]]
([TIME[2015-08-04 08:21:14 +09:00]] 版)
<https://w3c.github.io/webdriver/webdriver-spec.html>

[12] [CITE@en[WebDriver]]
([TIME[2015-08-04 09:40:50 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20150804/>

[13] [CITE@en[WebDriver]]
([TIME[2015-08-05 09:53:35 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20150805/>

[14] [CITE@en[WebDriver]]
([TIME[2015-08-08 18:42:00 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20150808/>

[15] [CITE[WebDriver now a living standard]]
([TIME[2015-08-05 00:12:26 +09:00]] 版)
<https://sny.no/2015/08/living>

[16] [CITE@en[WebDriver]]
([TIME[2015-08-28 06:56:57 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20150827/>

[17] [CITE@en[WebDriver]]
([TIME[2015-09-02 19:16:24 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20150902/>

[18] [CITE@en[WebDriver]]
([TIME[2015-09-09 21:28:34 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20150909/>

[19] [CITE@en[WebDriver]]
([TIME[2015-09-15 23:41:36 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20150915/>

[20] [CITE@en[WebDriver]]
([TIME[2015-09-18 19:01:06 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20150918/>

[21] [CITE@en[WebDriver]]
([TIME[2015-09-21 19:57:39 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20150921/>

[22] [CITE@en[WebDriver]]
([TIME[2015-10-26 09:00:16 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20151025/>

[23] [CITE@en[WebDriver]]
([TIME[2015-10-28 14:55:19 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20151028/>

[24] [CITE@en[WebDriver]]
([TIME[2015-10-29 10:40:59 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20151029/>

[FIG(quote)[
[FIGCAPTION[
[25] [CITE@ja[Microsoft Edge 用 WebDriver (Windows)]]
([TIME[2015-11-07 22:14:26 +09:00]] 版)
<https://msdn.microsoft.com/ja-jp/library/mt188085(v=vs.85).aspx>
]FIGCAPTION]

> Microsoft Edge の WebDriver 実装では既存のテストとの下位互換のために、W3C WebDriver 実装と JSON Wire Protocol の両方をサポートします。

]FIG]


[26] [CITE@en-US[Bringing automated testing to Microsoft Edge through WebDriver | Microsoft Edge Dev Blog]]
([TIME[2015-11-07 22:11:03 +09:00]] 版)
<https://blogs.windows.com/msedgedev/2015/07/23/bringing-automated-testing-to-microsoft-edge-through-webdriver/>

[27] [CITE@en-US[Developer Resources : Microsoft Edge Dev]]
([TIME[2015-11-07 22:15:51 +09:00]] 版)
<https://dev.windows.com/en-us/microsoft-edge/platform/status/webdriver/details/>

[28] [CITE@en[WebDriver]]
([TIME[2015-11-09 21:41:50 +09:00]] 版)
<http://www.w3.org/TR/2015/WD-webdriver-20151109/>

[29] [CITE@en[WebDriver]]
([TIME[2016-01-20 09:39:43 +09:00]] 版)
<https://www.w3.org/TR/2016/WD-webdriver-20160120/>

[31] [CITE@en[WebDriver]]
([TIME[2016-04-27 01:21:39 +09:00]] 版)
<https://www.w3.org/TR/2016/WD-webdriver-20160426/>

[32] [CITE@en[WebDriver]]
( ([TIME[2016-05-23 21:42:38 +09:00]]))
<https://www.w3.org/TR/2016/WD-webdriver-20160523/>

[34] [CITE@en-US[WebDriver Status - Mozilla | MDN]]
( ([TIME[2016-08-04 17:24:28 +09:00]]))
<https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver/status>

[44] [CITE@en[WebDriver]]
([TIME[2016-08-30 23:27:25 +09:00]])
<https://www.w3.org/TR/2016/WD-webdriver-20160830/>

[45] [CITE[WebDriver Support in Safari 10 | WebKit]]
([TIME[2016-09-06 00:16:18 +09:00]])
<https://webkit.org/blog/6900/webdriver-support-in-safari-10/>

[46] [CITE@en[WebDriver]]
([TIME[2016-10-13 22:37:03 +09:00]])
<https://www.w3.org/TR/2016/WD-webdriver-20161013/>

[47] [CITE@en[WebDriver]]
([TIME[2016-10-20 06:00:23 +09:00]])
<https://www.w3.org/TR/2016/WD-webdriver-20161019/>

[48] [CITE@en[WebDriver]]
([TIME[2016-10-22 08:51:18 +09:00]])
<https://www.w3.org/TR/2016/WD-webdriver-20161021/>

[49] [CITE@en[WebDriver]]
([TIME[2016-10-26 00:27:09 +09:00]])
<https://www.w3.org/TR/2016/WD-webdriver-20161025/>

[50] [CITE@en[WebDriver]]
([TIME[2016-11-01 06:48:14 +09:00]])
<https://www.w3.org/TR/2016/WD-webdriver-20161031/>

[51] [CITE@en[WebDriver]]
([TIME[2016-11-15 19:44:51 +09:00]])
<https://www.w3.org/TR/2016/WD-webdriver-20161115/>

[52] [CITE@en[WebDriver]]
([TIME[2016-11-16 23:46:53 +09:00]])
<https://www.w3.org/TR/2016/WD-webdriver-20161116/>

[53] [CITE@en[WebDriver]]
([TIME[2016-11-30 05:42:32 +09:00]])
<https://www.w3.org/TR/2016/WD-webdriver-20161129/>

[54] [CITE@en[WebDriver]]
([TIME[2017-01-05 23:45:24 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170105/>

[55] [CITE@en[WebDriver]]
([TIME[2017-01-11 00:28:23 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170110/>

[56] [CITE@en[WebDriver]]
([TIME[2017-01-12 01:39:38 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170111/>

[57] [CITE@en[WebDriver]]
([TIME[2017-01-12 23:39:44 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170112/>

[58] [CITE@en[WebDriver]]
([TIME[2017-01-13 19:37:18 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170113/>

[59] [CITE@en[WebDriver]]
([TIME[2017-01-17 05:10:11 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170116/>

[60] [CITE@en[WebDriver]]
([TIME[2017-01-18 07:58:54 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170117/>

[61] [CITE@en[WebDriver]]
([TIME[2017-01-19 05:54:35 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170118/>

[62] [CITE@en[WebDriver]]
([TIME[2017-01-20 07:35:46 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170119/>

[63] [CITE@en[WebDriver]]
([TIME[2017-01-21 07:23:59 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170120/>

[64] [CITE@en[WebDriver]]
([TIME[2017-01-21 20:01:26 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170121/>

[65] [CITE@en[WebDriver]]
([TIME[2017-01-24 00:52:41 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170123/>

[66] [CITE@en[WebDriver]]
([TIME[2017-01-25 03:16:26 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170124/>

[67] [CITE@en[WebDriver]]
([TIME[2017-01-25 22:19:39 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170125/>

[68] [CITE@en[WebDriver]]
([TIME[2017-01-26 18:17:50 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170126/>

[69] [CITE@en[WebDriver]]
([TIME[2017-01-28 02:57:57 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170127/>

[77] [CITE@en[WebDriver]]
([TIME[2017-02-01 06:34:38 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170131/>

[78] [CITE@en[WebDriver]]
([TIME[2017-02-01 21:39:55 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170201/>

[79] [CITE@en[WebDriver]]
([TIME[2017-02-03 02:38:22 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170202/>

[80] [CITE@en[WebDriver]]
([TIME[2017-02-04 07:17:53 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170203/>

[81] [CITE@en[WebDriver]]
([TIME[2017-02-07 05:59:53 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170206/>

[82] [CITE@en[WebDriver]]
([TIME[2017-02-07 22:27:06 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170207/>

[83] [CITE@en[WebDriver]]
([TIME[2017-02-10 07:23:29 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170209/>

[84] [CITE@en[WebDriver]]
([TIME[2017-02-11 01:03:00 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170210/>

[85] [CITE@en[WebDriver]]
([TIME[2017-02-14 06:43:06 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170213/>

[86] [CITE@en[WebDriver]]
([TIME[2017-02-15 05:22:14 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170214/>

[87] [CITE@en[WebDriver]]
([TIME[2017-02-15 21:04:04 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170215/>

[88] [CITE@en[WebDriver]]
([TIME[2017-02-17 22:47:44 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170217/>

[89] [CITE@en[WebDriver]]
([TIME[2017-02-19 02:10:37 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170218/>

[90] [CITE@en[WebDriver]]
([TIME[2017-02-20 01:00:44 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170219/>

[91] [CITE@en[WebDriver]]
([TIME[2017-02-20 23:52:02 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170220/>

[92] [CITE@en[WebDriver]]
([TIME[2017-02-22 02:15:14 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170221/>

[93] [CITE@en[Toggle spec to CR status]]
([[sideshowbarker]]著, [TIME[2017-02-21 14:26:38 +09:00]])
<https://github.com/w3c/webdriver/commit/6273b09685132df5715ba707d2d57e53bf508ac6>

[94] [CITE@en[WebDriver]]
([TIME[2017-02-23 01:08:03 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170222/>

[95] [CITE@en[WebDriver]]
([TIME[2017-02-23 23:37:59 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170223/>

[96] [CITE@en[WebDriver]]
([TIME[2017-02-25 07:42:23 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170224/>

[97] [CITE@en[WebDriver]]
([TIME[2017-02-28 22:13:28 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170228/>

[98] [CITE@en[WebDriver]]
([TIME[2017-03-01 21:46:19 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170301/>

[99] [CITE@en[WebDriver]]
([TIME[2017-03-02 17:58:50 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170302/>

[100] [CITE@en[WebDriver]]
([TIME[2017-03-06 20:21:38 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170306/>

[101] [CITE@en[WebDriver]]
([TIME[2017-03-07 19:07:50 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170307/>

[102] [CITE@en[WebDriver]]
([TIME[2017-03-09 00:20:18 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170308/>

[41] [CITE@en[Transition Request: WebDriver to Candidate Recommendation]]
([[Michael'''['''tm''']''' Smith]]著, [TIME[2017-03-09 20:47:40 +09:00]])
<https://lists.w3.org/Archives/Public/www-archive/2017Mar/0000.html>

[104] [CITE@en[WebDriver]]
([TIME[2017-03-12 16:32:29 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170312/>

[105] [CITE@en[WebDriver]]
([TIME[2017-03-16 21:27:42 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170316/>

[106] [CITE@en[WebDriver]]
([TIME[2017-03-21 05:26:59 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170320/>

[107] [CITE@en[WebDriver]]
([TIME[2017-03-23 01:58:09 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170322/>

[108] [CITE@en[WebDriver]]
([TIME[2017-03-25 02:21:55 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170324/>

[109] [CITE@en[WebDriver]]
([TIME[2017-03-29 23:17:52 +09:00]])
<https://www.w3.org/TR/2017/WD-webdriver-20170329/>

[110] [CITE@en[WebDriver]]
([TIME[2017-03-30 17:16:33 +09:00]])
<https://www.w3.org/TR/2017/CR-webdriver-20170330/>

[111] [CITE@ja[WebDriver について私が知っていること (2017 年版) - ひだまりソケットは壊れない]]
([TIME[2017-05-09 11:08:20 +09:00]])
<http://vividcode.hatenablog.com/entry/web-driver-introduction-2017>

[112] [CITE@en[webdriverio/webdriverio: A Node.js bindings implementation for the W3C WebDriver protocol]]
([TIME[2017-05-09 23:42:12 +09:00]])
<https://github.com/webdriverio/webdriverio>

[113] [CITE@ja[WebDriver によるスクリプト実行の現状 (geckodriver と ChromeDriver) - ひだまりソケットは壊れない]]
([TIME[2017-05-11 12:29:12 +09:00]])
<http://vividcode.hatenablog.com/entry/web-driver/how-to-execute-script>

[114] [CITE@en[interface: mark navigator.webdriver as unforgeable]]
([[andreastt]]著, [TIME[2017-05-13 08:36:13 +09:00]])
<https://github.com/w3c/webdriver/commit/b50038af851ca2d11edfe0a70f568332f50d0ac4>

[115] [CITE@en[Rephrase description of navigator.webdriver]]
([[shekyan]]著, [TIME[2017-05-19 08:50:02 +09:00]])
<https://github.com/w3c/webdriver/commit/48e8c855facbcbc8682d734c0922ce69d71ce248>

[116] [CITE@en[disable auto publish since the spec is now CR]]
([[deniak]]著, [TIME[2017-06-06 22:17:09 +09:00]])
<https://github.com/w3c/webdriver/commit/0d62ec62c2c18502cd7ebd20452a0d0a7fc90508>

[117] [CITE@en[Changes around navigator.webdriver]]
([[shekyan]]著, [TIME[2017-06-09 14:43:07 +09:00]])
<https://github.com/w3c/webdriver/commit/96a38f2415aa59bbe370aaafb451b01b0dccfe39>

[118] [CITE@en[Changes around navigator.webdriver by shekyan · Pull Request #948 · w3c/webdriver]]
([TIME[2017-07-08 13:49:21 +09:00]])
<https://github.com/w3c/webdriver/pull/948>

[119] [CITE@en[Remove obsolete W3C bug tracker link.]]
([[joshbruning]]著, [TIME[2017-07-13 06:47:04 +09:00]])
<https://github.com/w3c/webdriver/commit/95929cd3e87eb25c5ff53bb7aea4a840d30df4f2>

[120] [CITE@en[Remove obsolete W3C bug tracker link. by joshbruning · Pull Request #978 · w3c/webdriver]]
([TIME[2017-07-20 19:50:36 +09:00]])
<https://github.com/w3c/webdriver/pull/978>

[121] [CITE@en[Structuring WebDriver callback code]]
([[Geoffrey Sneddon]]著, [TIME[2017-07-20 19:09:34 +09:00]])
<https://lists.w3.org/Archives/Public/www-archive/2017Jul/0001.html>

[122] [CITE@en[Transition Request: WebDriver to Proposed Recommendation]]
([[Michael'''['''tm''']''' Smith]]著, [TIME[2017-09-08 22:22:11 +09:00]])
<https://lists.w3.org/Archives/Public/www-archive/2017Sep/0000.html>

[123] 
ページ遷移が終わって読み込みが終わったら~~~みたいな条件でテストを書くのが難しい。ただでさえ面倒くさいのに、ブラウザーごとに微妙に WebDriver の動作が違ったり、(たぶん)たまたまのタイミングの問題でうまくいったりいかなかったりするのでますます難しい。普通に思った通りに書いても基本的に動かない。。。

そして本当に書きたいことを書くのがまた難しい。ここをクリックしたあとに画面にこの要素がいい感じに見えていたらOK、みたいなのはたぶん書こうと思えば書けるんだけど簡単には書けない。そういうテストを書いてこそ意味がある気がするが難しい。

WebDriver API の上に便利APIをいっぱい作らないとつらそうだ・・・。
[TIME[2014-11-05]]

[124] しかもそういうのって開発の途中やリニューアル的なタイミングで[[要素]]の構造や表示位置が変わったりするので、
それを想定して壊れなそうに書く必要があって、それがまたむずいのよね。

[125] [CITE@en[ios-driver documentation]]
([[François Reynaud]]著, [TIME[2015-02-08 09:55:49 +09:00]])
<https://ios-driver.github.io/ios-driver/?page=home>

[126] [CITE[WebDriver Support in Safari 10 | WebKit]]
([TIME[2017-12-01 20:23:49 +09:00]])
<https://webkit.org/blog/6900/webdriver-support-in-safari-10/>

[127] [CITE[Appium: モバイルアプリのテスト自動化はすごいことになった]]
([TIME[2017-08-23 05:55:37 +09:00]])
<http://appium.io/>

[128] [CITE@en[Generalize protocol extension mechanism (#1177)]]
([[jugglinmike]]著, [TIME[2018-01-06 19:28:51 +09:00]])
<https://github.com/w3c/webdriver/commit/971ab897921b3a84ce5c426fefca5c9b3d2ebff2>

[129] [CITE@en[Improve wording around extension commands · Issue #1142 · w3c/webdriver]]
([TIME[2018-01-07 13:50:02 +09:00]])
<https://github.com/w3c/webdriver/issues/1142>

[130] [CITE@en[Generalize protocol extension mechanism by jugglinmike · Pull Request #1177 · w3c/webdriver]]
([TIME[2018-01-07 13:50:11 +09:00]])
<https://github.com/w3c/webdriver/pull/1177>

[131] [CITE@en[interface: expose navigator.webdriver unconditionally]]
([[andreastt]]著, [TIME[2018-02-03 04:56:37 +09:00]])
<https://github.com/w3c/webdriver/commit/a224627dcea6448367523bf0420de3d547946300>

[132] [CITE@en[Expose navigator.webdriver regardless of whether we're running under automation or not · Issue #1214 · w3c/webdriver]]
([TIME[2018-02-04 16:04:59 +09:00]])
<https://github.com/w3c/webdriver/issues/1214>

[133] [CITE@en[interface: expose navigator.webdriver unconditionally by andreastt · Pull Request #1219 · w3c/webdriver]]
([TIME[2018-02-04 16:06:06 +09:00]])
<https://github.com/w3c/webdriver/pull/1219>

[134] [CITE@en[Transition Request: WebDriver to Proposed Recommendation]]
([[Michael'''['''tm''']''' Smith]]著, [TIME[2018-03-23 22:46:22 +09:00]])
<https://lists.w3.org/Archives/Public/www-archive/2018Mar/0003.html>

[136] [CITE@en[Re: Transition Request: WebDriver to Proposed Recommendation]]
([[Michael'''['''tm''']''' Smith]]著, [TIME[2018-04-10 08:53:22 +09:00]])
<https://lists.w3.org/Archives/Public/www-archive/2018Apr/0000.html>

[137] [CITE[New WebKit Features in Safari 11.1 | WebKit]]
([TIME[2018-04-13 13:40:37 +09:00]])
<https://webkit.org/blog/8216/new-webkit-features-in-safari-11-1/>

[138] [CITE@en[Transition Request: WebDriver to Recommendation]]
([[Michael'''['''tm''']''' Smith]]著, [TIME[2018-05-31 22:29:25 +09:00]])
<https://lists.w3.org/Archives/Public/www-archive/2018May/0004.html>

[139] [CITE@en[Web Driver re-charter · Issue #126 · w3c/strategy]]
([TIME[2018-10-13 21:58:36 +09:00]])
<https://github.com/w3c/strategy/issues/126>

[140] [CITE@en[WebDriver]]
([TIME[2018-10-11 00:11:12 +09:00]])
<https://w3c.github.io/webdriver/>

[141] [CITE@en[mobile-spec/spec-draft.md at master · SeleniumHQ/mobile-spec]]
([TIME[2019-08-29 12:27:46 +09:00]])
<https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md>

[142] [CITE[Capabilities & ChromeOptions - ChromeDriver - WebDriver for Chrome]]
([TIME[2020-02-14 06:04:33 +09:00]])
<https://chromedriver.chromium.org/capabilities>

[144] [CITE@en[Navigator.webdriver - Web APIs | MDN]]
([TIME[2020-04-20 16:21:55 +09:00]])
<https://developer.mozilla.org/en-US/docs/Web/API/Navigator/webdriver>



[152] 
[[ChromeDriver]] で動くのに [[GeckoDriver]] では動かない場合、
[[GeckoDriver]] (というより [[Marionette]] か?) の表示関係の機能の融通が効かないとか、  
[[Firefox]] が [[CSSOM]] 関係の [[API]] の挙動がおかしいとかが多い。
[[Mozilla]] はその方面が弱い印象はずっとあるなあ。
[TIME[2024-09-27T01:59:05.000Z]]




