如何在Selenium中阅读Web浏览器控制台?

时间:2016-03-30 08:41:46

标签: java selenium selenium-webdriver selenium-chromedriver

我使用的是Selenium 2.46.0版。 为了调试不同的问题(例如客户端问题),我想获取所有Web浏览器控制台内容(错误,警告......)

我尝试使用:

LogEntries logs1 = DefaultDriver.getWebDriver().manage().logs().get("client");

但获得了空日志条目......

BTW,我定义了这些功能:

capabilities = DesiredCapabilities.firefox();
LoggingPreferences logs = new LoggingPreferences();
logs.enable( LogType.CLIENT, Level.ALL );
capabilities.setCapability( CapabilityType.LOGGING_PREFS, logs );
webDriver = new FirefoxDriver( capabilities );

我还尝试了“驱动程序”和“浏览器”日志类型,但没有获得Web控制台内容。

知道该怎么做吗?

以下链接中的解决方案无效... Capturing browser logs with Selenium

2 个答案:

答案 0 :(得分:0)

我不确定这是否有效。 但您可以尝试打开控制台,如下所示

Actions builder = new Actions(pbDriver); builder.keyDown(Keys.CONTROL).sendKeys(Keys.F12).keyUp(Keys.CONTROL).perform();

然后使用selenium与控制台进行交互。

OR,

您可以通过从用户数据目录“手动”获取日志来尝试不太优雅的解决方案:

  1. 将用户数据目录设置为固定位置:

    options = new ChromeOptions(); capabilities = DesiredCapabilities.chrome(); options.addArguments("user-data-dir=/your_path/"); capabilities.setCapability(ChromeOptions.CAPABILITY, options);

  2. 从位于您上面输入的路径中的日志文件chrome_debug.log中获取文本

  3. 编辑:

    我实际上尝试了问题中提到的方法,它对我有用。我使用的浏览器是Chrome。正如Siking指出的那样,我使用了.enable(LogType.BROWSER)来获取日志。 以下代码确实打印了整个运行期间捕获的所有日志。

    LogEntries logEntries = pbDriver.manage().logs().get("browser"); for (LogEntry entry : logEntries) { System.out.println(entry.getMessage());

    我刚刚了解到,由于开发人员工具不是DOM模型的一部分,因此不能使用selenium与之交互。 Sikuli可以用来完成这项工作

答案 1 :(得分:0)

你可以试试这个:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

def get_logs2(driver):
# enable browser logging
    #d = DesiredCapabilities.CHROME
    #d['goog:loggingPrefs'] = { 'browser':'ALL' }
    #driver = webdriver.Chrome(desired_capabilities=d)

    # load the desired webpage
    #driver.get('http://34.90.50.21/')
    #driver.get(driver.current_url)
    a = driver.get_log('browser')

    # print messages
    for entry in driver.get_log('browser'):
        print(entry)
    print("finished")
    return a

或检查这个:Robot Frameworkget background call with Robot Framework/selenium