I want the console.log output from Chrome. I'm working with selenium on Python

+2 votes
I am running my Selenium tests using Chrome and Python API bindings. I want the console.log output of my chrome tests and i'm unsure how to go about that. I found out about get_log() and log_types() methods on the WebDriver object, and I saw chrome's console log which shows how to get it using Java. But I can't find an equivalent of Java's LoggingPreferences type in Python API. Is there a way to accomplish what is needed?
May 3, 2018 in Selenium by eLiJha
• 700 points
5,278 views
What about java? I have the same question, but I'm working on Java.

You can use the same for Java but the code will change and again you can use getTagName() method to extract the tag name. This a table i found on internet hope this would help you.
 

Variation Description Sample
By.className finds elements based on the value of the "class" attribute findElement(By.className("someClassName"))
By.cssSelector finds elements based on the driver's underlying CSS Selector engine findElement(By.cssSelector("input#email"))
By.id locates elements by the value of their "id" attribute findElement(By.id("someId"))  
By.linkText finds a link element by the exact text it displays findElement(By.linkText("REGISTRATION"))  
By.name locates elements by the value of the "name" attribute findElement(By.name("someName"))  
By.partialLinkText locates elements that contain the given link text findElement(By.partialLinkText("REG"))  
By.tagName locates elements by their tag name findElement(By.tagName("div"))  
By.xpath locates elements via XPath findElement(By.xpath("//html/body/div/table/tbody/tr/td[2]/table/
 tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]"))

Apparently Selenium provides a way to catch console.log calls. It is possible to intercept them with the selenium java bindings.

Hey! As mentioned in the question above, you can use LoggingPreferences type. 

If you are looking to get the logs from the browser using Java, you can try the following method too:

LogEntries logs = driver.manage().logs().get("browser");

Actually, I'm testing Google Analytics using Java/ Selenium Framework/ Chromedriver/ chrome extension "Google Analytics Debugger". I was able to see all my tags in Chrome devtools consoles, but unable to send it log. I used all recommendation, which I found on internet, but ... I have similar code on Pythone, which is working fine, but on java - it doesn't work for me.

Can you share your code of both java and python with us? It would be easier to check the problem.

So, there is my java code (just small part) :

/////////////////////////////////////////////////////////////////////////////

package gui.ga;

import com.environment.web.BaseTest;
import net.serenitybdd.junit.runners.SerenityRunner;
import net.thucydides.core.annotations.WithTag;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.logging.LogEntries;
import org.openqa.selenium.logging.LogEntry;
import org.openqa.selenium.logging.LogType;
import java.io.*;
import java.util.*;

@RunWith(SerenityRunner.class)
public class DemoTest extends BaseTest {

    @Test
    @WithTag("Production")
    public void GTM_Test() {

        wd.get("https://boattrader.com");


        System.out.println("================== BROWSER LOGS =======================");

        LogEntries logEntries = wd.manage().logs().get(LogType.BROWSER);
        for (LogEntry entry : logEntries) {
            System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " " + entry.getMessage() + " " + entry.toString());
        }
        System.out.println("=======================================================");

    }
}
///////////////////////////////////////////////////////////////////////////////////
Because I used framework - this is my second part for chromedriver:
case CHROME:
                System.setProperty("webdriver.chrome.logfile", "NUL");
                ChromeOptions options = new ChromeOptions();
                
                options.addExtensions(new File("My_path_to_ext/extension_2_7_0_0.crx"));
                ChromeDriver driver = new ChromeDriver(options);
                DesiredCapabilities capabilities = DesiredCapabilities.chrome();
                capabilities.setCapability(CapabilityType.SUPPORTS_APPLICATION_CACHE, false);

                LoggingPreferences logPrefs = new LoggingPreferences();
                logPrefs.enable(LogType.BROWSER, Level.ALL);
                logPrefs.enable(LogType.CLIENT, Level.ALL);
                logPrefs.enable(LogType.DRIVER, Level.ALL);
                logPrefs.enable(LogType.SERVER, Level.ALL);
                logPrefs.enable(LogType.PERFORMANCE, Level.ALL);

                capabilities.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
                capabilities.setCapability("browser", "Chrome");

                ChromeDriver driver = new ChromeDriver(options);
                DesiredCapabilities capabilities = DesiredCapabilities.chrome();
                capabilities.setCapability(ChromeOptions.CAPABILITY, options);

                LoggingPreferences logPrefs = new LoggingPreferences();
                logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
                capabilities.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);

//         capabilities.setCapability(CapabilityType., value);

                capabilities.setCapability("browser","INFO");
                capabilities.setCapability("driver","INFO");
                capabilities.setCapability("capability_name", "capability_value");
                driver = new ChromeDriver(options);
                driver = new ChromeDriver(capabilities);

                Map<String, Object> prefs = new HashMap<>();

                prefs.put("profile.default_content_settings.popups", 0);
                options.setExperimentalOption("prefs", prefs);

                prefs.put("download.prompt_for_download", "false");
                prefs.put("profile.default_content_settings.popups", 0);


                String downloadPath = String.format("%s/target/downloads/", System.getProperty("user.dir"));
                prefs.put("download.default_directory", new File(downloadPath).getPath());
                prefs.put("safebrowsing.enabled", "true");
                prefs.put("profile.default_content_settings.multiple-automatic-downloads", 1);

                options.setExperimentalOption("prefs", prefs);
                options.addArguments(String.format("--lang=%s", Language.getCurrentLanguage()));
                options.addArguments("disable-infobars");

                return new ChromeDriver(options);
/////////////////////////////////////////////////////////////////
Python code (without framework):

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


URL = 'https://www.boattrader'


class FindTest():

    def __init__(self):
        self.chrome_options = webdriver.ChromeOptions()
        self.desiredCapabilities = DesiredCapabilities.CHROME
        self.desiredCapabilities['loggingPrefs'] = {'browser': 'INFO'}
        self.driver = ''

    def test(self):

        # load the GA Debugger extension
        self.chrome_options.add_extension('analyticsdebugger.crx')
        # Specify Chrome webdriver options
        self.driver = webdriver.Chrome(chrome_options=self.chrome_options,
                                       desired_capabilities=self.desiredCapabilities)
        # Launch URL
        self.driver.get(URL)

        for entry in self.driver.get_log('browser'):
            # Only show me messages with 'dimension3' (portal)
            if 'dimension3' in entry['message']:
                # parse and get the message
                message = entry['message']
                messageParts = message.split("\"")
                # check only for cd3 = dimension3 (not dimension30 or dimension300)
                if '(&cd3)' in message:
                    # parse message
                    messagePartsParts = messageParts[1].split('(&cd3)')
                    # Display for testing and demo purposes
                    print('------------')
                    print(len(messagePartsParts))
                    print('Message: {}'.format(message))
                    print('------------')
                    print('Dimension: {}'.format(messagePartsParts[0].strip()))
                    print('Value: {}'.format(messagePartsParts[1].strip()))
                    print('------------')
        # Quit test, close browser
        self.driver.quit()


# Run test
runtest = FindTest()
runtest.test()

///////////////////////////////////////////////////////////////////////////////////////////////////////

Python code is returning full log with google analytics data, but not java. 

I found how to fix my code. Later - will be explain.
Hey, I have got the same issue. Can you please tell me how you solved it?
Hey can you help me with how you fixed it?

1 answer to this question.

Your answer

Your name to display (optional):
Privacy: Your email address will only be used for sending these notifications.
+1 vote

So this is how you do it with Python:

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

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

# load some site
driver.get('http://foo.com')

# print messages
for entry in driver.get_log('browser'):
    print entry

Those entries whose source field equal to 'console-api' correspond to the console messages, & the message itself is stored in message field.

answered May 3, 2018 by sniffy_god
• 760 points

I just changed my code to:

            case CHROME:
                System.setProperty("webdriver.chrome.logfile", "NUL");
                ChromeOptions options = new ChromeOptions();
                //Removing notification - Chrome is being controlled by automated test software
//                options.addArguments("--disable-extensions");
//                options.addArguments("--auto-open-devtools-for-tabs");
//                options.addArguments("--disable-application-cache");

                options.addExtensions(new File("../your_path/google_analytics_2_7.crx"));

                options.setCapability(ChromeOptions.CAPABILITY, options);
                LoggingPreferences logPrefs = new LoggingPreferences();
                logPrefs.enable(LogType.BROWSER, Level.ALL);
                options.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);

                Map<String, Object> prefs = new HashMap<>();
                prefs.put("download.prompt_for_download", "false");
                prefs.put("profile.default_content_settings.popups", 0);

                String downloadPath = String.format("%s/target/downloads/", System.getProperty("user.dir"));
                prefs.put("download.default_directory", new File(downloadPath).getPath());
                prefs.put("safebrowsing.enabled", "true");
                prefs.put("profile.default_content_settings.multiple-automatic-downloads", 1);
                options.setExperimentalOption("prefs", prefs);
                options.addArguments(String.format("--lang=%s", Language.getCurrentLanguage()));
                options.addArguments("disable-infobars");
                return new ChromeDriver(options);
//////////////////////////////////////////////////////////////////
All my other code start working immediately after that.
great! So what changes did you make here?

Related Questions In Selenium

+2 votes
2 answers

How can I press ENTER key with the execute_script in selenium python?

The below code containing Keys.ENTER might just ...READ MORE

answered Mar 27, 2018 in Selenium by nsv999
• 5,030 points
3,958 views
0 votes
1 answer

How do i click on <input type=file> on any browser if i'm testing with Selenium Webdriver?

Does not matter which OS or which ...READ MORE

answered Apr 29, 2018 in Selenium by king_kenny
• 3,590 points
2,052 views
0 votes
2 answers
0 votes
1 answer

Finding WebDriver element with Class Name in java

The better way to handle this element ...READ MORE

answered Apr 10, 2018 in Selenium by nsv999
• 5,030 points
61 views
0 votes
1 answer
0 votes
1 answer

Geo-location microphone camera pop up

To Allow or Block the notification, access using Selenium and you have to ...READ MORE

answered May 11, 2018 in Selenium by Samarpit
• 5,130 points
432 views
0 votes
1 answer

How to use such xpath to find web elements

It's much simpler to use: #MyDiv123 > div.super or ...READ MORE

answered Jun 14, 2018 in Selenium by Samarpit
• 5,130 points
49 views
0 votes
1 answer
0 votes
1 answer

© 2018 Brain4ce Education Solutions Pvt. Ltd. All rights Reserved.
"PMP®","PMI®", "PMI-ACP®" and "PMBOK®" are registered marks of the Project Management Institute, Inc. MongoDB®, Mongo and the leaf logo are the registered trademarks of MongoDB, Inc.