8

I am looking to access/use Chrome's devtools panel with Selenium Webdriver.

Specifically, I want to use the "WASP" chrome plugin, which is accessed through devtools. I've got my selenium set up to run with the WASP plugin included, and I can open DevTools (with sendKeys.F12), but I don't know how to actually use that panel now that it is open. Is there a way to do so?

The closest thing I've found to my problem is this link: Chrome Dev Tools API & Selenium WebDriver, but that hasn't been helpful at all to me.

Also, if it looks like this will be impossible (which it does) can anyone think of a workaround?

Community
  • 1
  • 1
Sarah
  • 348
  • 1
  • 2
  • 12
  • 4
    WebDriver is for driving the browser and interacting with a web page. It won't control the devtools other than keyboard shortcuts. – JeffC Sep 25 '15 at 21:30
  • 1
    Chrome extension is also a "web page" with address like `chrome-extension://some_gibrish/some_name.html` and some JS that does something. You can spy on actual URL from developer tools (expand extension > right-click Inspect >...) So theoretically you could "inject" that extension onto your page and cause it to run its JS scripts... Looks like a lot of work, and very specific to each extension. – timbre timbre Dec 21 '15 at 22:49

1 Answers1

3

In Selenium 4 alpha, there is a way to interact with DevTools API using the java-client. What you are looking for specifically is the "Profiler" domain (https://chromedevtools.github.io/devtools-protocol/tot/Profiler)

Recently, I contributed the "Network" and "Performance" domains for a better user facing API in selenium java - https://github.com/SeleniumHQ/selenium/pull/7212

I believe that "Profiler" will also be implemented soon. Of course, there is a generic API for all domains in Java client that was merged a while ago, you can use it like this:

     driver.getDevTools().createSession();

    driver.getDevTools().send(new Command("Profiler.enable", ImmutableMap.of()));
    driver.getDevTools().send(new Command("Profiler.start", ImmutableMap.of()));

    //register to profiler events
    driver.getDevTools().addListener(new Event("Profiler.consoleProfileStarted", ConsoleProfileStarted.class), new Consumer<Object>() {
        @Override
        public void accept(Object o) {
            //do something
        }
    });

Until the Profiler domain will added to Selenium java client, you will have to supply your Mapper.

Adi Ohana
  • 927
  • 2
  • 13
  • 18