(实战)通过WebElement.sendKeys()来研究线协议

<强>引入:

seleniumwireWebDriver API线(命令)json, WebServiceWebDriver APIWeb服务

(WebElement.sendKeys (String))线

<强>线

http://code.google.com/p/selenium/wiki/JsonWireProtocol

RESTfulweb线服务。


<强>调试实战:

id策略名,dataProvider


sendKeys()方法如下:

(实战)通过WebElement.sendKeys()来研究线协议


sendKeys


87年执行()CommandsendKeys (String) DriverCommand.SEND_KEYS_TO_ELEMENT (“sendKeysToElement”), keysToSend变量ImmutableMap,


LinuxFirefoxFirefoxWebElementexecute () ImmutableMapWebElementid

(实战)通过WebElement.sendKeys()来研究线协议


execute ()

(实战)通过WebElement.sendKeys()来研究线协议


436 webdriver到它sessionsessionId, DriverCommand。SEND_KEYS_TO_ELEMENT字符串CommandCommand


<强>

446 commandexecutorexecute () Commandweb serviceHttpCommandExecutor

<强>

455 - 456



<强>

webDriver=new FirefoxDriver (firefoxBinary firefoxProfile)

FirefoxDriverRemoteWebDriverRemoteWebDriver

而startSession会在开始就用命令模式,调用execute()方法创建一个新的会话:

(实战)通过WebElement.sendKeys()来研究线协议

它的命是newSession令的名字,而sessionId为空,因为还没有创建嘛。


然后信息对象中包含了要发送的请求url,这里可以看的出,它发送到的请求url是/会话

(实战)通过WebElement.sendKeys()来研究线协议

最后从httpMethod对象中,可以看出httpMethod用的是HttpPost

(实战)通过WebElement.sendKeys()来研究线协议


所以联系以上的信息就知道,在RemoteWebDriver中,其实它是以HttpPost方法发送了一个请求对象到/会话中,并且请求对象中包含了命令“newSession”还有一些desiredCapabilities信息。

我们对比线协议:

(实战)通过WebElement.sendKeys()来研究线协议

正如协议中描述的,这个请求是用来创建一个新的会话的,我们检查参数,请求类型,请求有效载荷完全一致。


所以最后会发送此请求,发送完的反应中会包含新创建的sessionId。

(实战)通过WebElement.sendKeys()来研究线协议

然后这个sessionId就可以作为每次发送请求到的目标浏览器的标识,从而保证每次请求的都是正确的浏览器了,当然,这个sessionId就必须被包含在每次请求中。


<>强精华分析2:HttpCommandExecutor执行命令的细节。


HttpCommandExecutor.execute ()


279 commanddrivercommand。SEND_KEYS_TO_ELEMENTurlREST CommandInfo

(实战)通过WebElement.sendKeys()来研究线协议


sendKeysToElement POST/会议/:sessionId/元素/:id/valueurl


(实战)通过WebElement.sendKeys()来研究线协议

sendKeysToElement


281 commandinfohttp:

(实战)通过WebElement.sendKeys()来研究线协议


getMethodurl (sessionId)、(: id) urlremoteServerurl

信息(动词)“后”,httpMethodHttpPosturi

(实战)通过WebElement.sendKeys()来研究线协议

这里可以看出(sessionId)、(: id)都被替换了,其中sessionId来自于浏览器的sessionId,具体可参见

(实战)通过WebElement.sendKeys()来研究线协议