I am struggling with a PhantomJS/GhostDriver issue in my CI builds. (Geb/Selenium tests hang loading new page)
Unfortunately there is no PhantomJS 2.0 binary for Linux yet, and I have not successfully been able to build it from source.
In the meantime, is there a way I can run the latest GhostDriver from within an older version of PhantomJS?
Related
I'm using selenium 4 devtools in my tests. Recently, my local browser got updated to v105. However, doesn't seem like mvn repository has artifacts to support it. The latest version is available v104 https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-devtools-v104. With that, is there any work around I can utilize until v105 becomes available
Thank you!
Download 4.5.0 Selenium Verison. Need not to add selenium devtools dependency seperately. It has CDP support for v104, v105, and v106 also.
https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG
I am interested in getting the browser Version
I've two questions-
Question 1:- is there is a way to find out the browser version without setting up the browser?
or can we force stop the downloading of the Driver in the first place.
It is possible with the below code but the driver will be downloaded in this case.
WebDriverManager.chromedriver().setup(); //without doing this step
WebDriverManager.chromedriver().getDownloadedDriverVersion();
Question 2:-
Currently I am using wmic commands for browser detection which is used in WebDriverManager but it is failing on some systems.
what more alternatives ways are used in the WebDriverManager to fetch the browser version. I am curious to know about this as I've disabled wmic on my system still webDriverManager is working as usual(I guess with alternative methods within WebDriverManager).I am facing difficulties in understand the code. Please help me to understand the flow of the WebDriverManager like which methods/ways are used to detect the browser version and in what order.
Any help would be appreciated!
WebDriverManager
WebDriverManager is the open-source Java library that maintains the configuration management of the drivers required by Selenium WebDriver (e.g., chromedriver, geckodriver, msedgedriver, etc.) in a fully automated fashion.
Additionally, WebDriverManager provides other relevant features, such as the capability to discover browsers installed in the local system, building WebDriver objects (such as ChromeDriver, FirefoxDriver, EdgeDriver, etc.), and running browsers in Docker containers seamlessly.
The primary use of WebDriverManager is the automation of driver management (i.e., download, setup, and maintenance) of the drivers involved in your Test Automation Suite. Hence using WebDriverManager it's highly unlikely you can force stop the downloading of the Driver in the first place.
However, when you use a specific browser version for the first time in a while the matched driver version is downloaded and saved within the cache which is pretty much evident from the generated logs.
====== WebDriver manager ======
Current google-chrome version is 98.0.4758
Get LATEST chromedriver version for 98.0.4758 google-chrome
There is no [win32] chromedriver for browser in cache
Trying to download new driver from https://chromedriver.storage.googleapis.com/98.0.4758.102/chromedriver_win32.zip
Driver has been saved in cache [C:\Users\Sadanand.Kolhe\.wdm\drivers\chromedriver\win32\98.0.4758.102]
Moving forward, if the browser version and the matched driver version remains unchanged and at the same time the previous version of the downloaded version of the driver is available within the cache, the fresh downloading is avoided, which is evident from the logs generated from two back to back test execution.
====== WebDriver manager ======
Current google-chrome version is 98.0.4758
Get LATEST chromedriver version for 98.0.4758 google-chrome
Driver [C:\Users\Sadanand.Kolhe\.wdm\drivers\chromedriver\win32\98.0.4758.102\chromedriver.exe] found in cache
Regarding Q1, as of version 5, WebDriverManager allows detecting if a given browser is installed or not in the local system. To this aim, each manager provides the method getBrowserPath(). This method returns an Optional<Path>, which is empty if a given browser is not installed in the system or the browser path (within the optional object) when detected. See doc.
Regarding Q2, WebDriverManager uses internally a knowledge database called commands database. This database is a collection of shell commands used to discover the version of a given browser in the different operating systems (e.g., google-chrome --version for Chrome in Linux). This database contains WMIC commands for Windows but also queries to the registry. See doc again.
I am using Hound (https://github.com/HashNuke/hound) for integration testing a Phoenix application. I have chrome and chrome headless working. To get it working I have another terminal window running chromedriver (installed via brew). This feels odd to me. Is there a library or test setup that would feel more "integrated" into the application? What's the Elixir way of doing this?
In the Ruby world there's the webdrivers gem (https://github.com/titusfortner/webdrivers). As far as I know it downloads a specified driver (lets say chromedriver) to $HOME. Then with every test run, the test uses the driver downloaded to that destination to execute the tests.
Before the webdrivers gem there was chromedriver-helper gem. Before that it was phantomjs. These implementations made it so running integration tests required 1: downloading the driver 2: running the test
In Elixir (with Hound) I have my tests working by first running chromedriver --verbose in a terminal split, and in the other screen I run mix test. This works fine but feels disjointed. This adds extra steps, 1: download the driver 2: start the driver 3: run the test 4: stop driver
I could write a script manually to run chromedriver in the background, and stop it after the tests are run.
I am new to the Elixir community and so I've researched a lot. It's still not clear to me if there is a "traveled path" I should go down vs just hooking everything up manually.
Have I missed a recommended abstraction? Is this intentional? Is this "just not created, yet"?
Thank you
Have you checked out wallaby? See https://github.com/keathley/wallaby
Background
I am tasked with replacing our IE based printing logic with Chromium so that we can eventually support running our current server software on Windows Server Core or potentially other operating systems that support .Net Core. My current thought is to either use Chromium embedded framework or to make use of Puppeteer. I am leaning towards the later because I feel it would be easier to port between operating systems.
Issue
Originally it failed to start with an error about sandboxing so I added the no-sandbox flag. Now when I try to load Chromium it fails to start with the exception below stating that it cannot load chrome.dll
PS C:\Program Files (x86)\Google\Chrome\Application>> .\chrome --headless --enable-logging --disable-gpu --screenshot="C:\screen.png" "https://www.chromestatus.com/"
Which yields the following error in the debug.log file:
[0813/133208.016:ERROR:main_dll_loader_win.cc(134)] Failed to load Chrome DLL from c:\Program Files (x86)\Google\Chrome\Application\68.0.3440.106\chrome.dll: The specified module could not be found. (0x7E)
I have checked around the internet and found a few mentions of this error but the suggested fixes don't seem to fix the issue.
I was able to download Chromium 72.0.3592.0 via Chocolatey and the issue is resolved in that version. I tested using Server Core 2016 LTSB.
choco install chromium --pre -y
chrome --headless --disable-gpu --dump-dom --enable-logging https://www.chromestatus.com/ --no-first-run
Edit:
If you are attempting to run Selenium Tests using Docker windowsservercore and chromium: The command line tests of chromium chrome.exe appear to never work from the container command line.
However when you run dotnet test app.csproj or dotnet vstest app.dll inside the container the webdriver successfully starts and drives the browser
This has been reported to the Chromium team. It appears that Chromium 68+ might have issues with Windows Server 2016.
https://bugs.chromium.org/p/chromium/issues/detail?id=873097
I have a strange problem, which I'm unable to solve for sometime. I have a selenium WDS for Firefox browser. I tried to execute the code in JMeter UI, everything works fine. But when I try to execute the same in a server (using XVFB driver), I get the error:
rm="sun.org.mozilla.javascript.EvaluatorException: Can't find method org.openqa.selenium.remote.RemoteWebDriver.executeScript(string,org.openqa.selenium.remote.RemoteWebElement). (<Unknown source>#17) in <Unknown source> at line number 17"
All the required drivers are the same as the one I locally try. Yet, I get the error only when I run in the server but not locally. Please help
Most probably you have different versions of either WebDriver Sampler or dependency libraries, I don't see any other ways for the same script to work on one machine and don't work on another.
Install the same version of JMeter onto both machines (use JMeter 3.2 or later, whatever is available at JMeter Downloads Page)
Install latest version of the WebDriver Sampler plugin using JMeter Plugins Manager
Your test should now be running fine.