Your connection was interrupted. ERR_NETWORK_CHANGED when parse with Selenium - selenium

I wrote a parser in selenium, which clicks to different links and parses data. But from time to time I get an error
Your connection was interrupted. ERR_NETWORK_CHANGED
Perhaps this error is not related to selenium.
But, if I wait a little (about 1 second), then the connection appears again and I can continue to parse.
What way is there to solve this problem programmatically? Maybe in this case, somehow, I can reload the page until the connection appears again?

For me using a mac system and chrome for a daily basis, I encounter this problem now and then and finally found it might be helpful to solve this problem by just turning off the virtual machines or dock containers whichever can adjust your network configuration.
Maybe not fit for your case but it could be a hint. You can turn them off for a while if you have them running.

Related

selenium2 ( phpunit ) - connection error

I use selenium 2 with Phpunit. when I run a script I got this error during the run.
PHPUnit_Extensions_Selenium2TestCase_NoSeleniumException: Error connection[28] to localhost:4444/wd/hub/session/edf323b4-c6ba-471a-9966-f2b9f3718084/url: Operation timed out after 60000 milliseconds with 0 bytes received
sometimes after several seconds and sometimes after 20+ minutes (memory: 48Mb ).
it takes a lot of time to execute the script. ( it go over like 100 news in different pages )
but I don't believe that it is a problem ( sometimes it crush after seconds ).
I already tried update the selenium and phpunit framework to last version but it doesn't helps.
Is there any option to continue the script after the connection crush?
or avoid the crush?
I know that I can try to increase connection time, but I look for a different solution or explanation why it happens. any ideas?
thanks.
the problems with connection is because the CURL, I tried to change the php.ini and increase the timeout but it not works so I understand that probably selenium set the timeout on the fly or something. after a short grep I found this file:
phpunit/phpunit-selenium/PHPUnit/Extensions/Selenium2TestCase/Driver.php
in the construct method it possible to change the default of the 'timeout' variable. to make sure that this parameter never changed ( if you lazy to find all the places where selenium calls to this class ) set your default timeout to the 'seleniumServerRequestsTimeout' property ( not recommended ).
I had the same issue and after days trying everything(I tried the solutions in this question too) without success to solve this issue, I decided to change the browser.
I downloaded the Chrome Driver and everything started to work without any problem.
Which leads me to believe that can be some version conflict or something else.
I used Selenium version 2.53.0 and PhantomJS version 2.1.1.
I encountered the same problem.
It was caused by accessing to sessions and using session_id(). You should use session_write_close() to fix the issue.

Selenium Grid Headless Parallel

I am using Selenium grid to scrape thousands of pages since all the pages are heavily populated by Javascript.
I found this tutorial which gave me a pretty good idea of how to set up Selenium grid and run script in parallel. However, my situation is a little different.
(1) I only want one type of browser, like Chrome(or Firefox), but I want to run as many as possible.
(2) To make sure this solution scale, I probably will use some Cloud service where the code will be running in Linux environment.
So here is my question:
Do I have to use TestNG/Junit frame work to run the code in parallel? If I run the code in multiple processes, all making requests to the same hub, will the hub coordinate them out of box?
(1) I only want one type of browser, like Chrome(or Firefox), but I
want to run as many as possible.
You should be running not as many possible, but a heuristic number, that just works for you. The reason being is, running like 30 chrome browsers at a time can give you unpredictable results.
(2) To make sure this solution scale, I probably will use some Cloud
service where the code will be running in Linux environment.
You can look at BrowserStack
Do I have to use TestNG/Junit frame work to run the code in parallel?
Thats upto you. As far as your creating the driver in multiple threads your fine. If your using your own FW, then you can create Thread pool and start creating the driver from each thread pool.
If I run the code in multiple processes, all making requests to the
same hub, will the hub coordinate them out of box?
Yes Selenium Hub will be co-ordinating this for you, out of the box. You no need to worry about anything here.

inittab respawn of Node.js too fast

So I am trying to keep my Node server on a embedded computer running when it is out in the field. This lead me to leveraging inittab's respawn action. Here is the file I added to inittab:
node:5:respawn:node /path/to/node/files &
I know for a fact that when I startup this node application from command line, it does not get to the bottom of the main body and console.log "done" until a good 2-3 seconds after I issue the command.
So I feel like in that 2-3 second window the OS just keeps firing off respawns of the node app. I see in the error logs too in fact that the kernel ends up killing off a bunch of node processes because its running out of memory and stuff... plus I do get the 'node' process respawning too fast will suspend for 5 minutes message too.
I tried wrapping this in a script, dint work. I know I can use crontab but thats every minute... am I doing something wrong? or should I have a different approach all together?
Any and all advice is welcome!
TIA
Surely too late for you, but in case someone else finds such a problem: try removing the & from the command invocation.
What happens is that when the command goes to the background (thanks to the &), the parent (init) sees that it exited, and respawns it. Result: a storm of new instantations of your command.
Worse, you mention embedded, so I guess you are using busybox, whose init won't rate-limit the respawning - as would other implementations. So the respawning will only end when the system is out of memory.
inittab is overkill for this. I found out what I need is a process monitor. I found one that is lightweight and effective; it has some good reports of working great out in the field. http://en.wikipedia.org/wiki/Process_control_daemon
Using this would entail configuring this daemon to start and monitor your Node.js application for you.
That is a solution that works from the OS side.
Another way to do it is as follows. So if you are trying to keep Node.js running like I was, there are several modules written meant to keep other Node.js apps running. To mention a couple there are forever and respawn. I chose to use respawn.
This method entails starting one app written in Node.js that uses the respawn module to start and monitor the actual Node.js app you were interested in keeping running anyway.
Of course the downside of this is that if the Node.js engine (V8) goes down altogether then both your monitoring and monitored process will go down with it :-(. But its better than nothing!
PCD would be the ideal option. It would go down probably only if the OS goes down, and if the OS goes down then hope fully one has a watchdog in place to reboot the device/hardware.
Niko

Sqldependency:Query Notifications not receiving properly

We are using SQldependency for Query Notifications in our program. In our webserver we have database from which we send query notification. The application runs in our office PC. It works fine and I do receive instant notification on any changes in table. But for last few days sometimes I get error. The application is does not get any notification even though changes are there. The problem comes at random time. I also confirmed the internet connection by using continuous ping to the server and it was proper. Reopening my application solved the problem temporarily. But I want to know what may be reason for this problem. How can I troubleshoot it.
I don't think anyone can guess what is wrong with your deployment, w/o any info. My advice is to read The Mysterious Notification, Troubleshooting Query Notifications and Troubleshooting Dialogs. With a better understand of how it works and what to look for, perhaps you can diagnose the issue.

Possible issue with running selenium tests on one machine concurrently

I have multiple similar sites (same layout, just different data), and each of them has drop down menu on mouse over (and disappears on mouse out).
I am using Selenium 2 and WebDriver, and I have one selenium test case that basically do the mouse over and make sure each of the link in the drop down menu works.
I am using selenium grid, so I have a hub and few test machines.
Because I have many sites (few hundred) to test, so I am thinking of making each machine to run the test case against multiple sites in parallel.
My concern is because there can be only one active browser at a time, will it cause issue if web driver tries to perform Action.moveToElement() on multiple browsers at roughly the same time? Will only the active browser performs Action.moveToElement() properly and other browsers fail? If there will be an issue, is there any workaround?
I have tried it using JUnitCore.runClasses(ParallelComputer.classes(), SomeClass1.class, SomeClass2.class, SomeClass3.class);, it decreased the passed tests percentage from 100% to about 67% when running three tests on a machine. Not good =/.
The good part - firefox actually can do it in parallel. If the FF instances are delayed between each other so they don't do the same thing at the same time, it works better. Some of the failures happened during a Firefox bootup - so if you can minimize closing and opening windows, do it. But still, sometimes it just fails for no reason.
If you really would use the saved time, then go for it, log all failed tests and run them again after the first round - this time one at a time.
You could also solve this, depending on your ultimate goal of testing, by not using the Action class with the mouse-movement click, but instead use the WebDriver findBy-click method or Javascript executor method. It would probably be less contentious when running multiple windows at the same time. If the Action class, when defining a mouse movement, uses native calls at all, such as "move to Point", then one browser over the top of another, then I would guess it's possible that the movement point could be masked by another window. I am really not sure about this, just giving you another idea to try.