在使用POST /session/{会话id}/元素
执行搜索后,我从Chrome网络驱动程序中得到这个:
{ sessionId: '3241e7da289f4feb19c1f55dfc87024b',
status: 0,
value: { ELEMENT: '0.12239552668870868-1' } }
这就是规格要求吗?
我这么问是因为我找不到任何地方用大写字母清楚地写着“元素”。我能在规范中找到的就是设置了一个名为value
的键(它是:它被设置为{元素:'0.12239552668870868-1'}
>
我是否总能从其他浏览器的Web驱动程序中得到这种响应?也就是说,status
和sessionId
是否总是返回?
这是铬构成对象的方式吗?或者这是真实的任何网络驱动程序?当然不是,其他的web驱动程序返回什么?
我刚刚遇到了同样的问题,发现更改是在Selenium服务器和相关映像的3.5版本左右进行的。
我发现这个评论是最具体的,以了解更改并确定它在哪个版本中更改:https://github.com/SeleniumHQ/selenium/issues/4773#issuecomment-333092149
我使用的是像selenium/NodeFirefox:3.4这样的Docker图像。0-锕,并已发现v3。4.0返回旧JSonWire规范中的元素
键,而v3。9返回新WebDriver规范中的格式element-6066-11e4-a52e-4f735466cecf
(我没有检查这两个版本之间的任何其他版本)。
这是他们逐步迁移到WebDriver的一部分,但令人困惑的是,他们在3.5(或大约3.5)而不是v3上做了这一突破性的更改。我想每个人都会接受的。
火狐团队现在生产的Gecko和Chrome等“本地”驱动程序中也有多种实现,因为它们将有不同的开发路线图。
此外,我发现我正在使用的客户端库甚至还没有实现新的响应,所以我将不得不推迟一段时间(或者自己修补和发布)。我在其他客户机上也看到过类似的对话(比如两年前的Java客户机)。
您可以看到两个协议对元素响应的定义之间的差异:
https://github.com/SeleniumHQ/selenium/wiki/JsonWireProtocol#webelement-json对象
https://www.w3.org/TR/webdriver/#elements
WebDriver-W3C候选推荐书中明确提到了以下几点:
String对象使用其他本机ECMAScript对象使用的GetOwnProperty内部方法的变体。这种特殊的内部方法提供对与String对象的单个字符对应的命名属性的访问。
Browser Drivers
和Browser Clients
的内部范围内解决。 我用你提供的谷歌主页
的
搜索框
的所有信息做了一个小测试,即
https://www.google.co.in
与网络驱动程序的所有主要变体一起
,结果如下:
>
ChromeDriver
-OSS
:
[[ChromeDriver: chrome on XP (0d24fd038bde751b1e411711271c3e69)] -> name: q]
[[ChromeDriver: chrome on XP (0d24fd038bde751b1e411711271c3e69)] -> name: q]
FirefoxDriver
-W3C
:
[[FirefoxDriver: firefox on XP (e7a56813-97c5-466e-9c35-24c9f89af6ed)] -> name: q]
[[FirefoxDriver: firefox on XP (e7a56813-97c5-466e-9c35-24c9f89af6ed)] -> name: q]
InternetExplorerDriver
-W3C
:
[[InternetExplorerDriver: internet explorer on WINDOWS (367257db-cdbc-4be7-aeac-805a21ad9d2d)] -> name: q]
[[InternetExplorerDriver: internet explorer on WINDOWS (367257db-cdbc-4be7-aeac-805a21ad9d2d)] -> name: q]
当用户从“驱动程序”字段返回的值与“驱动程序详细信息”字段中的值相似时,您才可以查看该字段中的“障碍物详细信息”。
最后,值得一提的是,与FirefoxDriver和InternetExplorerDriver(两者都符合W3C标准)一样,ChromeDriver几乎符合W3C标准,并且可能在一些功能方面有所不同。
根据您的问题和更新,您对ChromeDriver和Chrome通信协议的了解是非常正确的。变得更细粒度,我们可以发现一些不同的
webcher
调用如下:
>
火狐:
1516626575533 webdriver::server DEBUG <- 200 OK {"value":{"element-6066-11e4-a52e-4f735466cecf":"6e35faa4-233f-400c-a6c7-6a66b54a69e5"}}
所以,火狐浏览器返回:
"value":{"element-6066-11e4-a52e-4f735466cecf":"6e35faa4-233f-400c-a6c7-6a66b54a69e5"}
>
铬:
[14.921][DEBUG]: DEVTOOLS RESPONSE Runtime.evaluate (id=25) {
"result": {
"type": "object",
"value": {
"status": 0,
"value": {
"ELEMENT": "0.7086986861512812-1"
}
}
}
}
因此,Chrome浏览器返回:
"value": {"ELEMENT": "0.7086986861512812-1"}
对于我们用户来说,最重要的是浏览器对象返回的元素值,它总是由用户引用,并由
webdriver
实例正确标识。所有这些内部逻辑对于最终用户来说都是抽象的。
从@FlorentB.的注释中添加一些重要字节:
Selenium的早期版本,即:Selenium v2. x使用关键字元素来存储DOM Tree元素的引用。此密钥在最近版本的Selenium中被更改,即。硒v3. x转至元素-6066-11e4-a52e-4f735466ce。当前ChromeDriver的大部分实现仍然来自Selenium 2. x规范。
我试图通过网络驱动程序在“http://www.kayak.co.in/?ispredir=true”中选择入住和退房时间。无法选择任何日期。请帮帮我。
我是SeleniumWebDriver的新手。我写这段代码是为了理解导航命令,但是一旦浏览器打开,就会显示一个登录弹出窗口。我试图使用类名或xpath关闭它,但出现超时异常。 在这种情况下,我需要使用显式等待吗?你能帮我找出问题所在吗? } 例外情况: [43.366][SEVERE]:超时接收来自渲染器的消息: 37.150[43.373][SEVERE]:超时接收来自渲染器的消息:-0.007
我得到了这个错误: SessionNotCreatedError:会话未创建超时异常:从呈现程序接收消息时超时:600.000 我正在Windows8Chrome上运行量角器测试。发生的情况是,Chrome选项卡将打开,但不会加载url,并将打开shell窗口。然后没有其他事情发生,测试超时。这说明我有一个超时错误。但我不确定为什么它一开始没有加载网站。 当我关闭chrome选项卡时,我会收到以下
搜索上下文是selenium中最超级的接口,它由另一个称为网络驱动程序的接口扩展。 -所有搜索上下文和Web驱动程序接口的抽象方法都在远程WebDriver类中实现。 -所有与浏览器相关的类,如Firefox驱动程序、Chrome驱动程序等,都扩展了远程Webdriver类。 根据上面的stmt,远程web驱动程序类如何为搜索上下文接口和web驱动程序接口中定义的所有抽象方法给出定义。因为功能驱动
我有以下selenium脚本,等待页面加载并查找元素。在检索到元素之后,我想关闭驱动程序,这样我的ram就会被释放,但是整个程序以结束,这意味着驱动程序在不适当的时间被关闭。我如何正确关闭我的驱动程序后,我想要的信息?
我使用python脚本,它传递给卡桑德拉批处理查询,如下所示: 这是一段时间的工作,但在启动脚本失败并打印后约2分钟内: 我将超时从 更改为: read_request_timeout_in_ms:15000 range_request_timeout_in_ms:20000 write_request_timeout_in_ms:20000 cas_contention_timeout_in_m