Selenium with Chromedriver can't allow Chrome to know Location - selenium

I can't allow Chrome to know Location when appears the popup asking if i want to allow.
I use the nuget Selenium 4.3.0 with .Net 6 and chromedriver version 103.0.5060.66
I tried a lot of solutions that i found on internet (Stackoverflow, medium, github Issue list, etc..) but nothing work and i don't know if i'm doing somenthing wrong or there are some bug in the new version of selenium (i tried to downgraded to 4.0.0 and still the problem)
I Use the following ChromeOptions:
chromiumOptions.AddArgument("--disable-infobars");
chromiumOptions.AddArgument("--ignore-certificate-errors");
chromiumOptions.AddArgument("--allow-running-insecure-content");
chromiumOptions.AddArgument("--disable-blink-features=AutomationControlled");
chromiumOptions.AddArgument("--disable-dev-shm-usage");
chromiumOptions.AddArguments("headless");
chromiumOptions.AddAdditionalChromeOption("useAutomationExtension", false);
chromiumOptions.AddExcludedArgument("enable-automation");
chromiumOptions.AddArguments("--disable-gpu");
chromiumOptions.AddArgument("--no-sandbox");
I tried the following options whithout results: (Also try with AddAdditionalCapability and AddAdditionalOption)
chromiumOptions.AddUserProfilePreference("profile.default_content_settings.geolocation", 1);
chromiumOptions.AddUserProfilePreference("profile.managed_default_content_settings.geolocation", 1);
Also i tried with cdp command
Dictionary<string, object> commandParameters = new Dictionary<string, object>();
commandParameters = new Dictionary<string, object>();
commandParameters.Add("origin", "https://www.openstreetmap.org");
commandParameters.Add("permissions", new List<string>() { "geolocation" });
seleniumBrowser.ExecuteCdpCommand("Browser.grantPermissions", commandParameters);
But nothing works and still appear the Chrome Location Popup asking if i want to allow.
Thanks in advance!

Related

Can we change binary path location in QAF framework

I have a requirement to run application in chrome beta version using Qmetry Automation framework.
I tried to change binary path using capabilities and other different ways but none of them worked, Could please help in providing solution
Looks like issue is in capability value. Try adding goog: prefix to key chromeOptions, for example:
chrome.additional.capabilities={"goog:chromeOptions":{"binary":"Path to the Chrome executable"}}
Here is easiest way to generate or validate Capabilities:
public static void main(String[] args) {
ChromeOptions options = new ChromeOptions();
options.setBinary("Path to the Chrome executable");
System.out.println(JSONUtil.toString(options.toJson()));
}
Refer answer of similar question for another way to set capability through code using driver listener.

Selenium.InternetExplorer.WebDriver does not continue after do "GoToUrl" with some pages (google, elmundo.es, etc)

Package: Selenium.InternetExplorer.WebDriver
Version: 3.12.0, 3.150.0
InternetExplorerOptions options = new InternetExplorerOptions();
driver = new InternetExplorerDriver(options);
driver.Navigate().GoToUrl("http://www.google.com");
string hello = ""; <-- never come here and not exceptions
While using Selenium.InternetExplorer.WebDriver Version: 3.150.0 you might face some issues because as per the changelog:
...Users using this version of the IE driver with language bindings
prior to 4.0 may encounter issues if the bindings do not properly
format the new session request; nevertheless, this change will not be
reverted, as future versions of the language bindings should properly
format the new session command.
A better option would be to upgrade to Selenium v4.0.0.0

New chrome version 54.0.2840.87 break the file auto download in selenium chromedriver

I am using the latest selenium chromedriver_win32_2.25 driver. Today after I updated the my Chrome to 54.0.2840.87. I can not do the auto downloading. The Chrome will pop up and window "XXX.zip is malicious, and Chrome has blocked it" . I found out I can disable this alert by turning off the Chrome option "Protect you and your device from dangerous sites". This is the opposite way to allowing auto download before (Check the post How to disable 'This type of file can harm your computer' pop up)
The following code is not working:
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("safebrowsing.enabled", "false");
prefs.put("safebrowsing.malware.enabled", "false");
prefs.put("download.prompt_for_download", "false");
prefs.put( "profile.content_settings.pattern_pairs.*.multiple-automatic-downloads", 1 );
prefs.put("download.default_directory", downloadDir);
options.setExperimentalOption("prefs", prefs);
Not sure what is the lastest parameters for the "Protect you and your device from dangerous sites"
Seems prefs.put("safebrowsing.enabled", "false"); not working.
I had a similar problem. After a bit of research, I tried:
options.AddUserProfilePreference("profile.default_content_setting_values.automatic_downloads", 1);
rather than my original:
options.AddUserProfilePreference("profile.content_settings.pattern_pairs.*,*.multiple-automatic-downloads", 1);
...and it worked just fine, now. This is when I went to Chrome 52.0.2743.116 m.

Could not locate Firefox on the current system (Firefox 47)

After the Firefox self-upgraded to version 47, Selenium stopped working.
I followed the Javascript (Node.js) steps suggested by Mozilla regarding the Marionette driver, but the console says that it can't find Firefox on my current system, however the path to the browser is fine and standard.
The error is "Could not locate Firefox on the current system"
at C:\Users\\node_modules\selenium-webdriver\firefox\binary.js:115:11
If it matters, I use WebdriverJS.
I've had this happen and it always seems to be very random. This is a long shot but try changing the path and then putting the original back this has worked for me in the past.
I'm having a similar problem and see that there seem to be a wealth of problems with Firefox 47 and WebDriver (JS and other languages) being discussed in the GG group. Your only solution for now might be to downgrade - https://ftp.mozilla.org/pub/firefox/releases/46.0.1/
Admittedly, downgrading did not solve my problem, but ymmv
I had the same problem and solved it by downloading the Developer Edition from https://www.mozilla.org/en-US/firefox/developer/. Apparently there is some conflict regarding using the developer edition of firefox.
In node_modules/selenium-webdriver/firefox/binary.js, line 99, this code :
let exe = opt_dev
? '/Applications/FirefoxDeveloperEdition.app/Contents/MacOS/firefox-bin'
: '/Applications/Firefox.app/Contents/MacOS/firefox-bin';
found = io.exists(exe).then(exists => exists ? exe : null);
chose the DeveloperEdition, but I didn't have it, which caused found to be null and later an error is thrown in line 115.
Could it be that your Firefox is not installed in the default location? Mine is installed in C:\Users\(username)\AppData\Local\Mozilla Firefox\, and I get the same error message as you.
Browsing the code (thanks #achie), I found the following in node_modules\selenium-webdriver\firefox\index.js:
* On Windows and OSX, the FirefoxDriver will search for Firefox in its
* default installation location:
*
* * Windows: C:\Program Files and C:\Program Files (x86).
* * Mac OS X: /Applications/Firefox.app
*
* For Linux, Firefox will be located on the PATH: `$(where firefox)`.
In other words, it's not even any use to put the Firefox directory in the PATH variable on Windows.
But the source code continues:
* You can configure WebDriver to start use a custom Firefox installation with
* the {#link Binary} class:
*
* var firefox = require('selenium-webdriver/firefox');
* var binary = new firefox.Binary('/my/firefox/install/dir/firefox-bin');
* var options = new firefox.Options().setBinary(binary);
* var driver = new firefox.Driver(options);
In my case, that becomes:
var firefox = require('selenium-webdriver/firefox');
var binary = new firefox.Binary('C:\\Users\\(username)\\AppData\\Local\\Mozilla Firefox\\firefox.exe');
var options = new firefox.Options().setBinary(binary);
var driver = new firefox.Driver(options);
Now Selenium finds my Firefox, but I get a next error message:
Error: Timed out waiting for the WebDriver server at http://127.0.0.1:53785/hub
I also tried var driver = new webdriver.Builder().forBrowser('firefox').setFirefoxOptions(options).build();, but that didn't make any difference.
Hope this helps you a bit further!
The folks at Mozilla are recommending using the Marionette driver as there is a start up crash issue with Selenium Webdriver 2.53 and Firefox 47/48
https://developer.mozilla.org/en-US/docs/Mozilla/QA/Marionette/WebDriver
The latest Firefox 48 and Selenium Webdriver 3.0.0 solved this particular issue.

Jmeter with selenium webdriver plugin-start firefox session without cleaning cookies/cache

I am using Jmeter 2.13 alongside with a selenium webdriver plugin. When I start my thread it opens a new firefox session with all the cookies and cache cleared. In a previous session I have made a sync that lasts almost 5 minutes that brings me in my app some products. I don`t want to sync everytime I start the thread.
Is there any way I could start the new firefox session without clearing cookies/cache ?
If my guess is correct, that Selenium is the one that is opening an instance of Firefox, please see below. If not, please provide more info about what you have setup with code examples.
By default Selenium is opening the Firefox in Safe mode, where a lot of stuff are disabled (like extensions, localstore settings, etc). This also means that you won't have any cache or cookies.
You can read more about this here.
To disable this, you need to set the `toolkit.startup.max_resumed_crashes` setting key in in `about:config` to `-1`.
Selenium code wise, this can be achieved by setting the preference in the FirefoxProfile. C# code to achieve it would look like this:
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.SetPreference("toolkit.startup.max_resumed_crashes", "-1");
IWebDriver driver = new FirefoxDriver(firefoxProfile);
Looking into FirefoxDriverConfig.java source code the plugin creates new profile each time Firefox starts:
FirefoxProfile createProfile() {
FirefoxProfile profile = new FirefoxProfile();
String userAgentOverride = getUserAgentOverride();
String ntlmOverride = getNtlmSetting();
if (StringUtils.isNotEmpty(userAgentOverride)) {
profile.setPreference("general.useragent.override", userAgentOverride);
}
if (StringUtils.isNotEmpty(ntlmOverride)) {
profile.setPreference("network.negotiate-auth.allow-insecure-ntlm-v1", true);
}
profile.setPreference("app.update.enabled", false);
addExtensions(profile);
setPreferences(profile);
return profile;
}
So there are 2 options:
Get plugin source code and amend profile initialisation line to use your existing profile as:
FirefoxProfile profile = new FirefoxProfile("/path/to/firefox/profile");
See How do I find my profile page of Mozilla documentation for instructions on how you can locate your current profile directory.
Stop using WebDriver Sampler and switch to JSR223 Sampler instead, it supports all the languages WebDriver Sampler does and provides full control (you'll have to write all the code to configure, start and stop browser yourself)