Host header or origin header is specified and is not localhost for selenium grid - selenium

I am trying to set up a selenium grid using the latest chrome and chromedriver. I get the following error when trying to run a test
Message: OpenQA.Selenium.WebDriverException : Unexpected error. Host header or origin header is specified and is not localhost.
On the node machine, I see the chrome browser open, but then it immediately closes and I get this error:
[1557513678.682][SEVERE]: Rejecting request with host: <hub_IP_address>:4444
Has anyone had this issue using the selenium grid? I am using:
selenium-server-standalone-4.0.0-alpha-1.jar and
Chromedriver 74.0.3729.6 for windows
My Chrome browser was running v.74.0.3729.108
JDK 12.0.1.0
Here is my command for starting the hub:
java -jar selenium-server-standalone-4.0.0-alpha-1.jar -role hub -hubConfig config.json
Here is my command to start a node:
java -Dwebdriver.chrome.driver="C:\...\Browsers\ChromeDirectory\chromedriver.exe" -Dwebdriver.ie.driver="C:\...\Browsers\IEDirectory\x86\IEDriverServer.exe" -jar -Dwebdriver.edge.driver="C:\...\Browsers\Edge\MicrosoftWebDriver.exe" -jar "C:\...\selenium-server-standalone-4.0.0-alpha-1.jar" -role node -hub "http://<hub_IP_address>:4444/grid/register/" -nodeConfig "C:\...\config.json"
I tried using a "host" property in the config.jsons. I tried putting the actual IP address and just localhost. But the hub and the node are obviously different machines, so putting localhost makes it so they can't connect. But when I dont have localhost, it says it needs to be specified as localhost? I'm so confused!! What is supposed to go in the host property?
I have seen people talk about a loopback property for protractor but I am not using protractor. I tried putting "loopback":true into both my node and hub config.json files but it doesn't seem to make a difference.
UPDATE:
I was able to get the grid to run successfully using the 4.0 alpha jar for the hub, and the old 3.8 jars for the nodes. All Still on Java 8. Kind of interesting.

You can try to add these switches: --whitelisted-ips --allowed-origins=''*
Try to run your node with command:
java -Dwebdriver.chrome.driver="C:\...\Browsers\ChromeDirectory\chromedriver.exe --whitelisted-ips --allowed-origins='*'" -Dwebdriver.ie.driver="C:\...\Browsers\IEDirectory\x86\IEDriverServer.exe" -jar -Dwebdriver.edge.driver="C:\...\Browsers\Edge\MicrosoftWebDriver.exe" -jar "C:\...\selenium-server-standalone-4.0.0-alpha-1.jar" -role node -hub "http://<hub_IP_address>:4444/grid/register/" -nodeConfig "C:\...\config.json"

I was able to get the selenium grid working by downgrading to 3.8.1 selenium grid jar and installing JDK 8 instead of 12. The reason I needed to get java 8 is answered in this other question. I used the same chrome driver and start up commands

Related

Unavailable Selenium node for Internet Explorer

This problem is making me crazy. I'll try to explain it.
I have a Selenium grid environment with two machines (HUB & NODE). I use .bat files to start the hub and the nodes, something like the code below:
HUB:
Here I start the hub:
start java -jar C:\workspace\selenium-server-standalone-2.45.0.jar -role hub -port 4444
Here I start a .bat on the node machine that will start the node.
psexec.exe \\XXX.XXX.XX.XXX -s -e -u USER -p PASSWORD -i 2 C:\Selenium\StartNode.bat
NODE:
To register the node:
java -jar C:\selenium\selenium-server-standalone-2.45.0.jar -role node -hub http://XXX.XXX.XX.XXX:4444/grid/register
I have this from the beginning (more or less 6 moths) and was fine and simple, but now I see very weird (for me) things but only in Internet Explorer. Basically, the node starts, IE opens to correct page but nothing happens. I just have "object not found errors..." Firefox and Chrome are just fine.
But, if I start the node directly on it (NODE machine, so not from HUB via psexec), it works fine for IE as well?
Do you guys have any logical explanation? I really have no idea.
I suppose you need to provide IEDriver exe when starting the node like below.
java -jar selenium-server-standalone-2.45.0.jar -role webdriver -hub http://192.168.1.100:4444/grid/register -browser browserName="internet explorer",version=10.0,platform=WINDOWS -Dwebdriver.internetexplorer.driver=c:\Selenium\InternetExplorerDriver.exe
Try to create node using such command:
java -Dwebdriver.ie.driver=C:\selenium\IEDriverServer.exe -jar C:\selenium\selenium-server-standalone-2.45.0.jar -role node -nodeConfig C:\selenium\nodeIE1.json
I used node instead webdriver (the last one is used for backward compatibility) and latest version of IEDriverServer
It works great for me. And you may try nssm to run your hub and node as win services instead using .bat files.

NUnit Tests failing on Selenium Grid

Im using Selenium Grid. When I run a test against my test site, I will hit the following error.
System.InvalidOperationException : Session [(null externalkey)] not available and is not among the last 1000 terminated sessions. Active sessions are[]
The test does not fail immediately, but will navigate around the site and to different pages before failing.
My Hub set up is batch file as follows:
cd C:\Automated Tests\Selenium
java -jar selenium-server-standalone-2.43.1.jar -role hub -hubhost my.hub..ip.address -port 4445
My Node set up is batch file as follows:
cd c:\Automated Tests\Selenium\
java -jar selenium-server-standalone-2.43.1.jar -port 5560 -role node -nodehost my.node.ip.address -hub http://my.hub.ip.address:4445/grid/register -browser"browserName=firefox,version=33.0,maxInstances=2,platform=WINDOWS" -nodeTimeout 600 -maxSession 10
Theres not a lot of information on this issue, so any help would be appreciated
I was facing the same issue and I found the solution.
This might be occurring because of using old objects.
Try instantiating new objects of your web elements when you close and start new driver session.
In this case, it does not throw stale element exception but it niether finds the web element in DOM with old object reference and hence throws the error.

Unable to run RC commands under Selenium Grid 2

I've tried this on multiple versions of selenium 2 (from 2.24-2.28) and on two different systems. It's a very simple scenario. I want to run RC commands via Selenium Grid and I don't want to port my 1000+ test scripts to WebDriver, so hopefully that's not the only solution.
Test case:
1) START HUB:
java -jar selenium-server-standalone-2.28.0.jar -role hub
2) START NODE:
java -jar selenium-server-standalone-2.28.0.jar -role node -hub http://localhost:4444/grid/register
(I've tried every variation of this I could think of, including -role rc)
Communications seem fine between the two. The console status is up and shows the connection between the two.
3) REQUEST RC URL:
http://localhost:4444/selenium-server/driver/?cmd=getNewBrowserSession&1=*firefox&2=http://www.google.com
Output is always:
HTTP ERROR: 500
Problem accessing /selenium-server/driver/. Reason:
java.lang.NullPointerException
If I revert to non-grid mode, the request returns as expected.
Am I missing something or is RC simply not supported under Grid 2?
This seems to be fixed for *firefox as a browser in 2.30 however I still observe the same behaviour for *googlechrome

Selenium - When running builds via the grid, how do you get the console output?

We've been running Selenium tests via local RC for a few years, and are starting to migrate to the grid. We have been redirecting the console output of the server to our own test logs. It is quite useful for debugging. The console output looks suspiciously like Log4J - so it should be reconfigurable.
10:31:51.894 INFO - Command request: open[http://websiteundertest/IsSiteUpUp.aspx, ] on session 46c211b412474429957dbf6bebccd64d
10:31:55.323 INFO - Got result: OK on session 46c211b412474429957dbf6bebccd64d
10:31:56.330 INFO - Command request: isElementPresent[xpath=//h2, ] on session 46c211b412474429957dbf6bebccd64d
10:31:56.343 INFO - Got result: OK,true on session 46c211b412474429957dbf6bebccd64d
When re run via the hub, the console output appears only on the remote RC. The simple console redirection won't work. In scope of this question, we need to capture the remote console output someplace where the computer executing the test can get to it. We run our tests from a number of build agents via C#. We are trying grid 1 and 2. We intend to go directly to Grid 2.x.
What he meant was that this:
java -jar selenium-server-standalone-2.15.0.jar -role webdriver -hub http://127.0.0.1:4444/grid/register > mylog.txt
does not work. It will create a new file but it will be empty. I suggest using -log mylog.txt
argument when starting node or server to store log files
In the latest version of Grid, you can redirect the output when you start each of your client nodes:
java -jar selenium-server-standalone-2.15.0.jar -role webdriver -hub http://127.0.0.1:4444/grid/register > mylog.txt
This is a Windows example. You can also centralize log files on some remote server by referencing a \\serverName\mylog.txt in your redirect.
When you say:
The simple console redirection won't work...
I'm not sure I understand.

How to run Selenium tests in Grid in one browser window?

When using only Selenium server it was possible to run the tests in the single browser window with the setting
-java -jar selenium-server-standalone-2.2.0.jar -singleWindow
When switched to grid 2, -singleWindow parameter is not working anymore.
Help is really appreciated.
Made it happen by running the following line:
java -jar selenium-server-standalone-2.2.0.jar -role webdriver -singleWindow -hub http://192.168.1.149:4444/grid/register -port 5557
Seems like the order of the parameters is important.