当前位置: 首页 > 知识库问答 >
问题:

Web驱动程序返回的值

滕胜涝
2023-03-14

在使用POST /session/{会话id}/元素执行搜索后,我从Chrome网络驱动程序中得到这个:

{ sessionId: '3241e7da289f4feb19c1f55dfc87024b',
  status: 0,
  value: { ELEMENT: '0.12239552668870868-1' } }

这就是规格要求吗?

我这么问是因为我找不到任何地方用大写字母清楚地写着“元素”。我能在规范中找到的就是设置了一个名为value的键(它是:它被设置为{元素:'0.12239552668870868-1'}

>

  • 我是否总能从其他浏览器的Web驱动程序中得到这种响应?也就是说,statussessionId是否总是返回?

    这是铬构成对象的方式吗?或者这是真实的任何网络驱动程序?当然不是,其他的web驱动程序返回什么?

  • 共有2个答案

    刁星渊
    2023-03-14

    我刚刚遇到了同样的问题,发现更改是在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

    王飞英
    2023-03-14

    WebDriver-W3C候选推荐书中明确提到了以下几点:

    • “查找元素”命令用于在当前浏览上下文中查找可用于将来命令的元素

    String对象使用其他本机ECMAScript对象使用的GetOwnProperty内部方法的变体。这种特殊的内部方法提供对与String对象的单个字符对应的命名属性的访问。

    • 所以调用GetOwnProperty是用于其他本机ECMAScript对象的内部方法,并在Browser DriversBrowser Clients的内部范围内解决。
    • Mozilla已经很好地记录了Object.getOwn财产名称()和getOwn财产描述器()。

    我用你提供的谷歌主页搜索框的所有信息做了一个小测试,即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