Microsoft WebDriver在启动新Edge会话时挂起,不响应进一步的请求

时间:2015-09-10 06:45:45

标签: selenium webdriver microsoft-edge

开幕式

我使用the Microsoft WebDriver server自动化Microsoft Edge。

我能够在我尝试的前2-3次启动浏览器,但随后的尝试似乎导致WebDriver服务器挂起。当我发送新会话命令时:

  1. WebDriver服务器记录它收到/会话请求。
  2. 服务器强行终止任何现有的Edge实例。
  3. 打开一个新的Edge窗口(到New Tab页面)。
  4. 没有其他事情发生。 WebDriver服务器永远不会发送响应。
  5. 此时Edge非常适用。我可以手动将其导航到页面,但它看起来完全正常。

    另一方面,当新会话请求挂起时,WebDriver服务器不会响应其他请求。例如,curl http://192.168.20.248:4444/status将挂起,服务器也不会记录任何传入的请求。 (我想这可能是预期的行为,但是?)

    如果我手动关闭Edge,然后,WebDriver服务器会发送回复:{"sessionId":null,"status":13,"value":{"message":"unknown error"}}

    任何想法可能会出错?我可以收集哪些日志或其他诊断信息来帮助调试吗?

    详细信息

    我正在运行Edge build 10240(和Windows 10 build 10240,即公共版本)。我已经在虚拟机和物理机上再现了这一点。

    在Windows 10计算机上,我在具有管理权限的命令提示符下运行WebDriver服务器:

    "C:\Program Files (x86)\Microsoft Web Driver\MicrosoftWebDriver.exe" --port=4444 --host=192.168.20.248
    

    在一台单独的Linux机器上,我正在运行此客户端代码。它会在到达.get来电之前挂起。

    import logging
    import time
    
    from selenium import webdriver
    from selenium.common.exceptions import WebDriverException
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    try:
        driver = webdriver.Remote(
            command_executor='http://192.168.20.248:4444',
            desired_capabilities=DesiredCapabilities.CHROME)
        driver.get('http://www.example.com')
        driver.get('http://www.google.com')
        driver.quit()
    except WebDriverException as e:
        logging.warning('caught error: %s' % e)
    

    我还可以使用原始线协议重现行为,无论价值多少。 /session的卷曲永远不会结束。

    #!/bin/bash
    
    wd_remote="http://192.168.20.248:4444"
    
    echo "STATUS: $(curl -s ${wd_remote}/status)"
    
    resp=$(curl -sd '{"desiredCapabilities": {"browserName":"MicrosoftEdge"}}' "${wd_remote}/session")
    session_id=$(echo "${resp}" | sed -rn 's/.*"sessionId":"([^"]+).*/\1/ p')
    if [[ -z "${session_id}" ]]; then
        echo "error starting session: ${resp}"
        exit 1
    fi
    echo "started session ${session_id}"
    curl -s -d '{"url": "http://www.google.com"}' "${wd_remote}/session/${session_id}/url"
    curl -s -XDELETE "${wd_remote}/session/${session_id}"
    echo "quit session ${session_id}"
    

    更新(wilx)

    我可以在几分钟后看到来自EdgeWebDriver的响应,表示超时:

    2016-01-20 11:38:19 DEBUG org.apache.http.wire:72 - http-outgoing-3 << "HTTP/1.1 200 OK[\r][\n]"
    2016-01-20 11:38:19 DEBUG org.apache.http.wire:72 - http-outgoing-3 << "Content-Type: application/json;charset=UTF-8[\r][\n]"
    2016-01-20 11:38:19 DEBUG org.apache.http.wire:72 - http-outgoing-3 << "Server: Microsoft-HTTPAPI/2.0[\r][\n]"
    2016-01-20 11:38:19 DEBUG org.apache.http.wire:72 - http-outgoing-3 << "Access-Control-Allow-Origin: *[\r][\n]"
    2016-01-20 11:38:19 DEBUG org.apache.http.wire:72 - http-outgoing-3 << "Date: Wed, 20 Jan 2016 10:38:19 GMT[\r][\n]"
    2016-01-20 11:38:19 DEBUG org.apache.http.wire:72 - http-outgoing-3 << "Content-Length: 60[\r][\n]"
    2016-01-20 11:38:19 DEBUG org.apache.http.wire:72 - http-outgoing-3 << "[\r][\n]"
    2016-01-20 11:38:19 DEBUG org.apache.http.wire:86 - http-outgoing-3 << "{"sessionId":null,"status":21,"value":{"message":"Timeout"}}"
    

1 个答案:

答案 0 :(得分:0)

我目前也需要使用自动边缘浏览器。 据我所知,到目前为止,在与#34; localhost&#34;不同的IP上启动WebDriver。需要一个提升的命令行。否则我得到一个错误:&#34; HttpAddUrlToUrlGroup失败了183&#34;。

但据我所知here,现在不支持在高架cmd中运行,导致问题的原因是Edge浏览器目前只能从运行浏览器本身的机器自动运行。 / p>