セレンPythonライブラリの原則の実現にwebdriverをドライブブラウザを動員

最近の研究ウェブオートメーションセレンライブラリで使用する場合、私は、瞬間を熟考し、非常に不思議な感じ、経験のポイントを書きました。

私たちは、コードと実行の次の3行を入力すると、新しくブラウザウィンドウを開いて、Baiduのホーム・ページにアクセスするでしょうが、これはそれを行う方法ですか?

1  からセレンインポートwebdriverを
 2ドライバ= webdriver.Chrome()
 3 driver.get(' http://www.baidu.com '

 

まず、セレンライブラリの構造を見てみましょう。

明らかに、セレンは、ソフトウェアパッケージである、二つの第一レベルのサブパッケージ、共通とwebdriverをがあります。webdriverををインポートした後、webdriver.Chrome Chromeは()それは何ですか?

)クロム下クラスwebdriverをからの二つのサブパケットの元のモジュール、ドライバ= webdriver.Chromeドライバ(webdriverをオブジェクトクラスをインスタンス化webdriverをです。のは、このクラスを見てみましょう:

このクラスは、それをしているのですか?それは運転する元の制御Google Chromeブラウザのドライバーですが、よく見ると、それが死ぬにする方法を参照して取得していない、ああ、それはRemoteWebDriverクラスから継承、それは、webdriverをリモートの下に2つのサブパッケージモジュールでありますああ、のようなwebdriverを、これは本当にああ、高頻度語です!この方法は、それを取得するために、そこに取得する必要があります。

案の定、上記質量参加を実行するメソッドを呼び出すために取得するには、我々はその順番に実行がcommand_executor.executeメソッドを呼び出しますが見つかりました:

继续查看,发现command_executor.execute方法是remote_connection.py这个模块里面的RemoteConnection类下面的,

看这个类注释,连接到远程浏览器驱动服务,很显然,浏览器驱动是服务端,selenium是客户端。在下面找到execute方法:

给远程服务端发命令command,又将命令传给下面的_request方法,发送HTTP请求给远程服务端,即浏览器驱动,这里出现了大家熟悉的请求方法get或者post,请求url,请求体,再往上看command:

原来发的是post请求,这里使用的是WebDriver wire protocol协议,即JsonWireProtocol,body部分是这个协议规定的JSON格式的字符串。

总的来说,过程还是很复杂的,至少对于我来说。

补充:对于每一条Selenium脚本,一个http请求会被创建并且发送给浏览器的驱动,浏览器驱动中包含了一个HTTP Server,用来接收这些http请求,HTTP Server接收到请求后根据请求来具体操控对应的浏览器,浏览器执行具体的测试步骤,浏览器将步骤执行结果返回给HTTP Server,HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息。

おすすめ

転載: www.cnblogs.com/wangyi0419/p/11353606.html