Is it Firefox or Geckodriver, which creates "rust_mozprofile" directory - selenium

Whenever we invoke Firefox, under '/tmp' directory rust_mozprofile directories are getting created. As Firefox internally calls Geckodriver we are not sure whether Firefox or Geckodriver is creating rust_mozprofile directory.
I do want to know whether Geckodriver or Firefox because, my '/tmp' directory is having less memory.
So the question is I really want to modify the path of creating directories for rust_mozprofile.
I am using below technologies,
Selenium - 3.3.0
Firefox - 52.2.0
Geckodriver - 13
Please give us some suggestion, if there is any.

If you have a closer look at the geckodriver v0.18.0 logs closely you will observe the very first occurrence of rust_mozprofile occurs in the following line:
1504762617094 Marionette CONFIG Matched capabilities: {"browserName":"firefox","browserVersion":"56.0","platformName":"windows_nt","platformVersion":"6.2","pageLoadStrategy":"normal","acceptInsecureCerts":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"rotatable":false,"specificationLevel":0,"moz:processID":5848,"moz:profile":"C:\\Users\\AtechM_03\\AppData\\Local\\Temp\\rust_mozprofile.OfFuR9ogm33d","moz:accessibilityChecks":false,"moz:headless":false}
This log clearly indicates that marionette is being configured with:
"moz:profile":"C:\\Users\\AtechM_03\\AppData\\Local\\Temp\\rust_mozprofile.OfFuR9ogm33d"
And this configuration is done by the WebDriver instance i.e. the GeckoDriver.
It's the GeckoDriver which internally configures the Marionette which in-turn initiates the Mozilla Firefox Browser.
IMO, this workflow is in practice since we migrated from the Legacy Firefox to Marionette based Firefox. Hence the same must be the case with Geckodriver - 13 as well.
Update:
GeckoDriver as an application/exe file:

You can set the location with the TMPDIR envvar. It's also useful to set both TMP and TEMP for other programs.

A solution is to use driver.quit() this closes all browsers and takes care of the profiles
Another solution is to add a custom profile
fp = webdriver.FirefoxProfile('specify location to profile .default')
driver = webdriver.Firefox(firefox_profile=fp)

I had a similar problem and I solved it by changing the Environment settings in Windows. Meaning that I changed the directory for the TMP and TEMP files, and after a reboot, the rust_mozprofile folder was generated where I wanted it.
This is the source I used: https://www.toolsqa.com/selenium-webdriver/how-to-use-geckodriver/ Specifically the "Set property in Environment Variables:-" section.
Sadly this will effect all Software that saves files to those folders. (In my case that is what I wanted though.) If there is a way to make only the rust_mozprofile folder be created in a specific directory through the program, I would love to learn more.

Related

Changing default path for Chrome executable for karate-chrome

I am using the Karate framework to do the API testing. As part of CI efforts, we send an email at the end of test execution listing the summary of test results. There is a need to include the screeshot of the test execution counts from 'overview-feature.html' file.
I did so through the TestRunner.java file - launched Chrome using Chrome.start() and then using it to take screenshot. It all works well locally on Windows.
However when executing on CI server which is a Unix box, the chrome executable is not present in the default location (usr/bin/google-chrome) and hence the connection for the localhost fails.
Is there a way we can change the default location of the chrome executable?
PS: Apologies if this was too trivial to be asked.
Yes Chrome on CI is hard to get right, refer: https://stackoverflow.com/a/62325328/143475 - note that CI boxes typically are "headless" a browser may not be even installed.
I think the best thing for you is to ZIP the HTML and send it. But I really think you need to work with some CI experts, because the report generation and e-mailing business is normally done by things like Jenkins. What you are doing is certainly not normal or best-practice.
If you really want, there is a Karate Docker container that can give you a proper Chrome instance (see docs) but that is overkill for what you need.
EDIT: The Chrome Java API allows for customization of the executable path and this is in the docs: https://github.com/intuit/karate/tree/master/karate-core#chrome-java-api
It should be something like this:
Chrome.start("/opt/blah/chrome");

Is it possible to modify the chrome download directory during the test execution?

Here, it is possible to set the default download directory using preferences in chrome_capability during the driver initialization.
But, is it possible to modify the chrome preferences during the test?
In my scenario, I need to download a particular file in a specific directory, in order to access the file(since the filename is randomly generated) so that i can keep the 'specific directory' clean and get the file name(since there will be only one file)
I searched a bit and lots of people said that Driver options have to be declared before driver initialization so it is not possible to change download directory after you initialized driver object. You need to open new driver and set its options while your test in execution.

JMeter with Webdriver Sampler - Browser window not opening

I am running Jmeter with the Webdriver plugin installed on Windows 7. My current test plan contains the Webdriver sampler and Firefox driver config. When I try to run the test plan, nothing happens. There is nothing recorded in the View Results Tree window, and the remaining test indicator in the top right hand corner counts down to 0 without anything happening.
When I deactivate the Webdriver Sampler and Firefox driver config elements, the remaining tests run without a problem.
Is there a bug with this software, or am I missing something? My code is below, if that helps.
var pkg = JavaImporter(org.openqa.selenium)
WDS.sampleResult.sampleStart()
WDS.browser.get('https://test.test.test.test') var username =
WDS.browser.findElement(pkg.By.id('USERNAME')).sendKeys([WDS.args[0]])
var password =
WDS.browser.findElement(pkg.By.id('PASSWORD')).sendKeys([WDS.args[1])
WDS.sampleResult.sampleEnd()
I have installed firefox 26, as this is the recommended supported browser, so it's not that there's no compatible browser.
My main question is this - Why doesn't the browser window open? Why do the other tests in the test plan fail to run when the config elements are active?
In 99% of cases the answer should be in jmeter.log file. In the meantime a couple of recommendations:
add the following line to system.properties file (lives in the /bin folder of your JMeter installation)
webdriver.firefox.bin=/path/to/your/firefox.exe
See https://code.google.com/p/selenium/wiki/FirefoxDriver page for other Firefox-related properties
locate all duplicate http* libraries like httpcore*.jar httpmime.jar etc. and remove the ones with lesser version
restart JMeter to pick the property and the changes up
Check out The WebDriver Sampler: Your Top 10 Questions Answered guide for other tips and tricks
You need to make sure you provided the full path of the Firefox driver in the jp#gc config element.

Selenium/Watir can't detect Chromedriver, even though it's in my path (Windows 7)

I know there's another question similar to this, but the link provided by the answerer is out of date (and when I dig into the current Watir documentation I only find info on Windows 8.1; I am on Windows 7, and the step that doc suggests for resolving this is not helping me per below)
I am attempting to execute a test using Watir/minitest (along the lines of rake ci:setup:minitest test TEST=test/full_path/happypath_test.rb), and it chokes on the following:
Selenium::WebDriver::Error::WebDriverError: Unable to find the chromedriver exec
utable. Please download the server from http://chromedriver.storage.googleapis.c
om/index.html and place it somewhere on your PATH. More info at http://code.goog
le.com/p/selenium/wiki/ChromeDriver.
The Watir documentation and error message both point to the PATH. However, I have just downloaded the latest version of Chromedriver (2.12, it appears) and plonked the exe in a folder that I have confirmed is in my PATH (specifically c:/Ruby193/bin - yes I know I'm on an old Ruby version; alas not something I can update for this project)
I know Chromedriver is present because I can run it from irb:
require 'watir-webdriver
followed by
b = Watir::Browser.new :chrome
This launches a chrome window just fine. But when I actually try to execute a test it gives the "can't find chromedriver" error.
I've run bundle install to try and be sure I'm on the right versions of things and don't know what else to do. Any help, please?
Specify the driver_path directly to Selenium.
Simply call this before launching your new browser window:
Selenium::WebDriver::Chrome::Service.driver_path = "/absolute/path/to/chromedriver"
This also has the benefit of not requiring you to muck up your PATH and you can checkthis into your repo (of course, make the path dynamic to your project root directory, etc.).
I found real nice posts here and here. You can configure in super easy steps.
I have tried and tested working superb.
From post 1:
Change from firefox to chrome (wherever you have instantiated the browser ), so that it will become:
#browser = Watir::Browser.new :chrome
Now if you are on Windows, copy paste the downloaded binary file in C:/Windows directory`
Second post tells about how to change the default path c:\windows to your project's custom path. Its interesting and helpful. Take a look for sure.

Firefox wants to update when I am using selenium?

Firefox is up to date on my computer but when I use selenium sometimes it messes up my program by saying that I need to or should update. Eventually this window can stop my program from working..is there any way to stop this?
Thanks.
If this is on a machine you have access to firefox has a setting that allows you to disable checking for updates which is the easiest way.
If you want to enforce this for all test runs, apparently the following should work:
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("app.update.auto", false);
profile.setPreference("app.update.enabled", false);
FirefoxDriver browser = new FirefoxDriver(profile);
In addition to the accepted answer:
1.) You can change the two autoupdate settings he mentioned in about:config of your FF profile, if you are reusing the same FF profile each time you run tests
2.) There are additional settings (e.g. outdated plugins can cause FF to update, extension options to autoupdate need to be turned off) which may help: https://support.mozilla.org/en-US/kb/how-stop-firefox-making-automatic-connections
3.) After doing both 1 and 2 above if you still have issues, deleting updater.exe from the Mozilla program folder (C:\Program Files\Mozilla Firefox\ or the x86 location) might do the trick but could also, as deleting a file from the programs folder can do anytime, cause unexpected problems