Chrome Browser terminates immediately after getting launched through selenium webdriver - selenium

I have installed the following versions to use selenium with chrome. The chrome browser is getting launched and opens the required url but immediately gets terminated and the window closes within few secs.
Please guide me on any changes I need to do.
Versions:
Chrome:78.0.3904.108
Chrome Driver:78.0.3904.105
Selenium:selenium-java-3.141.59
Java:jdk-8u231-windows-x64
Code:
System.setProperty("webdriver.chrome.driver","C:\\Users\\Pooja\\Desktop\\ChromeDriver\\chromedriver.exe);
WebDriver driver = new ChromeDriver();
driver.get("https://selenium.dev");
System.out.println(driver.getTitle());
driver.quit();
Output in console after execution:
Starting ChromeDriver 78.0.3904.105 (60e2d8774a8151efa6a00b1f358371b1e0e07ee2-refs/branch-heads/3904#{#877}) on port 1226
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
[1574867082.995][WARNING]: Timed out connecting to Chrome, retrying...
Nov 27, 2019 10:04:45 AM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
SeleniumHQ Browser Automation

I tried this using the same versions of Google chrome and the Chrome driver and it works for me. The issue is that you missed a quotation mark at then end of your driver path.
Hope this helps
System.setProperty("webdriver.chrome.driver","C:\\Users\\edgar\\Downloads\\chromedriver_win32\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://selenium.dev");
System.out.println(driver.getTitle());
driver.quit();

Related

Chrome Driver - no longer able to use DevTools api of a web driver session opened by selenium

I can no longer use DevTools remote debugging port api calls from a chrome driver instance that was started by selenium + chromedriver.
Previously we could use the dev-tools port using chrome-remote-interface.
Now, when I use chrome-remote-interface, the selenium webdriver seems to be unusable.
So for example, let's say I:
driver = new ChromeDriver()
Then I do this to go to a site:
driver.get("https://some-site.com")
So far so good.
Then I use the remote-debugging-port to make request as well.
See: https://github.com/cyrus-and/chrome-remote-interface for an example.
This also works.
Now I try to use the Java web driver again:
driver.get("https://some-site.com")
And I get an error:
[1651087065.452][INFO]: Done waiting for pending navigations. Status: timeout: Timed out receiving message from renderer: 0.000
[1651087065.452][INFO]: [4ac1553138574d061b37a45836c35096] RESPONSE GetCookies ERROR timeout: Timed out receiving message from renderer: 0.000
(Session info: chrome=100.0.4896.127)
[126480:126508:0427/141746.195721:ERROR:cast_crl.cc(391)] CRL - Verification failed.
I created an issue tracker: https://bugs.chromium.org/p/chromium/issues/detail?id=1320455&q=reporter%3Ame&can=2
Does anyone know a solution to this?
You no longer need to use chrome-remote-interface to access the chrome debugging port. You can now use Selenium 4's new ChromeDriver dev tools SDK to execute commands against chrome through the CDP.
Switching to this fixed the problem.

Selenium Firefox Headless Connect Remote Debugger

I am running a headless firefox browser with Selenium. If I run it in GUI mode then it works fine but when I run it in headless mode then I get an error about element being obstructed.
I really need a way to connect the Firefox remote debugger so I can see what is happening in the headless browser.
How do I enable remote debugging in selenium headless browser?
You can debug marionette Gecko Driver by enabling trace logs and change the log level in order to get trace logs:
You can use FirefoxOptions in Selenium Java client to change the log level
FirefoxOptions options = new FirefoxOptions();
options.setLogLevel(FirefoxDriverLogLevel.TRACE);
WebDriver driver = new FirefoxDriver(options);
For more information have a look at Firefox Source docs. More reading about debugging is here

UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server with Selenium Grid

Error in opening new driver window:
org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
server log:
Forwarding newSession on session null to remote
I am running following code on linux:
driver= new RemoteWebDriver((new URL( "http://"+ip+":5555/wd/hub")), capability);
My hub-node already up and running. Then why i am getting this error.
This error message...
org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.
and the server log...
Forwarding newSession on session null to remote
...implies that the Selenium Grid Hub / Selenium Grid Node wasn't properly initiated/started. As a result a null session was forwarded to the RemoteWebDriver.
Some more information regarding the versions of the binaries which you have used interms of Selenium server/client, WebDriver variant /version and WebBrowser variant /version and the commands you have used to initiate the Selenium Grid Hub / Selenium Grid Node would have helped us to debug your issue in a easier way.
However this issue can happen due to multiple factors as follows:
You are using the uri 5555/wd/hub, so ensure that Selenium Grid Hub is initiated on port 5555.
You may opt to replace the capability argument with an instance of Options class as follows:
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability("browser", "chrome");
//seting the required capabilities
ChromeOptions options = new ChromeOptions();
options.merge(caps);
WebDriver driver = new RemoteWebDriver((new URL( "http://"+ip+":5555/wd/hub")), options);
You can find a relevant discussion in Remote WebDriver UnreachableBrowserException: Could not start a new session
This issue is frequently observed with GeckoDriver/Selenium/Mozilla due to version mismatch of the binaries you are using. As a thumb rule always follow the configuration matrix from the GeckoDriver, Selenium and Firefox Browser compatibility chart
You can find a relevant discussion in WebDriverException: Message: newSession with GeckoDriver Firefox v65 and Selenium through Python 3.7

Why do we need to set the System Property for Chrome And IE Browser and Not For Firefox Browser

For Chrome,
public class Chrome {
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "E://chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
}
}
for Firefox,
public class Firefox {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com");
}
}
Why do we need to specify the system.setProperty for Chrome and IE?
I had also same question, but after digging I found,
WebDriver uses native browser approach. Selenium offers inbuilt
driver for Firefox but not for other browsers. All drivers (Chrome
Driver, IE driver, etc.) are built based on the special JS Engine used
by each browser.
Selenium WebDriver works very well with Mozilla Firefox because it has a built in driver server. But the same is not true for Internet Explorer and Google Chrome. Firefox is the most traditional browser, thus Selenium WebDriver do not require any additional utility to be set before launching the browser. The Selenium package automatically references towards the default location of the firefox.exe, thus the user need not to set any other property.
If you ever get the “the path to the driver executable must be set by the webdriver. ie. driver system property” error or its similarly worded Chrome equivalent, it means that you need to install the driver servers on your browser. The driver server manages the calls between the browsers and the Selenium wire protocol.
The InternetExplorerDriver is a standalone server which implements WebDriver’s wire protocol
Similarly, Google Chrome doesn’t have a built-in server so you will need a Chrome driver server for communicating your Selenium code to the browser. You can download the Chrome driver server.
Founded from here.
Implementation of FirefoxDriver, ChromeDriver, InternetExplorerDriver is different, thus the way of instantiating the object differs as well.
The Firefox Driver controls the Firefox browser using a Firefox plugin. The Firefox Profile that is used is stripped down from what is installed on the machine to only include the Selenium WebDriver.xpi
The InternetExplorerDriver is a standalone server which implements WebDriver’s wire protocol.
The ChromeDriver is maintained / supported by the Chromium project iteslf. WebDriver works with Chrome through the chromedriver binary (found on the chromium project’s download page). You need to have both chromedriver and a version of chrome browser installed. chromedriver needs to be placed somewhere on your system’s path in order for WebDriver to automatically discover it. The Chrome browser itself is discovered by chromedriver in the default installation path
For more details, refer the selenium documentation
Simple answer is, each browser has its own WebDriver implementation and is not maintained by the Selenium project. Hence for selenium to interact with the browser specific driver we need to specify the full path of the driver.
Why for firefox there is no need to specify the driverpath? In Selenium 2.0, selenium RC is still present and was supporting firefox. From Selenium 3.0 onwards there is no official support for any browser specific drivers. Hence, we need to specify the driver path through System.setproperty for all the browsers.

Chrome not reachable error message selenium webdriver for chromium application

I am automating a chromium application using selenium webdriver. These are my configuration settings:
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--url=application url");
chromeOptions.setBinary("application exe file");
chromeOptions.addArguments("--ignore-certificate-errors");
chromeOptions.addArguments("--remote-debugging-port=8000"); WebDriver
driver = new ChromeDriver(chromeOptions);
This code launches the chromium application successfully. I've confirmed that port 8000 is listening and able to get chromium application object on chrome browser.
But I am getting the exception below:
Starting ChromeDriver 2.16.333243
(0bfa1d3575fc1044244f21ddb82bf870944ef961) on port 18739 Only local
connections are allowed. FAILED CONFIGURATION: #BeforeMethod setUp
org.openqa.selenium.WebDriverException: chrome not reachable