<强>引入:强>
seleniumwireWebDriver API线(命令)json, WebServiceWebDriver APIWeb服务
(WebElement.sendKeys (String))线
<强>线强>
http://code.google.com/p/selenium/wiki/JsonWireProtocol
RESTfulweb线服务。
<强>调试实战:强>
id策略名,dataProvider
sendKeys()方法如下:
sendKeys
87年执行()CommandsendKeys (String) DriverCommand.SEND_KEYS_TO_ELEMENT (“sendKeysToElement”), keysToSend变量ImmutableMap,
LinuxFirefoxFirefoxWebElementexecute () ImmutableMapWebElementid
execute ()
436 webdriver到它sessionsessionId, DriverCommand。SEND_KEYS_TO_ELEMENT字符串CommandCommand
<强> 强>
446 commandexecutorexecute () Commandweb serviceHttpCommandExecutor
<强> 强>
455 - 456
<强> 强>
webDriver=new FirefoxDriver (firefoxBinary firefoxProfile)
FirefoxDriverRemoteWebDriverRemoteWebDriver
而startSession会在开始就用命令模式,调用execute()方法创建一个新的会话:
它的命是newSession令的名字,而sessionId为空,因为还没有创建嘛。
然后信息对象中包含了要发送的请求url,这里可以看的出,它发送到的请求url是/会话
最后从httpMethod对象中,可以看出httpMethod用的是HttpPost
所以联系以上的信息就知道,在RemoteWebDriver中,其实它是以HttpPost方法发送了一个请求对象到/会话中,并且请求对象中包含了命令“newSession”还有一些desiredCapabilities信息。
我们对比线协议:
正如协议中描述的,这个请求是用来创建一个新的会话的,我们检查参数,请求类型,请求有效载荷完全一致。
所以最后会发送此请求,发送完的反应中会包含新创建的sessionId。
然后这个sessionId就可以作为每次发送请求到的目标浏览器的标识,从而保证每次请求的都是正确的浏览器了,当然,这个sessionId就必须被包含在每次请求中。
<>强精华分析2:HttpCommandExecutor执行命令的细节。强>
HttpCommandExecutor.execute ()
279 commanddrivercommand。SEND_KEYS_TO_ELEMENTurlREST CommandInfo
sendKeysToElement POST/会议/:sessionId/元素/:id/valueurl
sendKeysToElement
281 commandinfohttp:
getMethodurl (sessionId)、(: id) urlremoteServerurl
信息(动词)“后”,httpMethodHttpPosturi
这里可以看出(sessionId)、(: id)都被替换了,其中sessionId来自于浏览器的sessionId,具体可参见