Selenium, PhantomJS, Mocha combination fails on sendKeys command - selenium-webdriver

I have implemented the following technology stack for automated unit testing in the browser.
Mocha -> Selenium -> Phantomjs
I followed this example:
http://net.tutsplus.com/tutorials/javascript-ajax/headless-functional-testing-with-selenium-and-phantomjs/
I suspect that there might be a bug in the "send keys" command between Selenium and PhantomJs. I do not have any experience in these 2 technologies, so I suspect it is rather me making some configuration mistake.
Basically what happens is that the characters sent by Selenium is not all applied by PhantomJs.
I switched PhantomJs out with Firefox and there it works like a charm.
The Selenium output for the 2 drivers are exactly the same. So I am left with suspecting a bug in PhantomJs or Ghostdriver. But as I said it might just be me not configuring the thing correctly. Given that this is quite a big issue I really suspect that is the case.
I am also not 100% sure where to log this, if this is indeed a bug.

There were a couple of issues with sendKeys fixed recently.
https://github.com/camme/webdriverjs/issues?page=1&state=closed
Are you running the latest version?
If not I would log a bug there about it.

Related

What is the most reliable .net selenium web driver?

In using .net selenium webdrivers, I have been stumbling in 2 main issues, each for a different specific webdriver.
The table below shows the issues Chrome and Firefox webdrivers have been falling short with me:
I am using RellYa's selenium jquery extensions.
Chrome webdriver randomly throws a jQuery not found exception. If I try a couple of times, I eventually succeed.
With Firefox's webdriver, this never happened.
On the other hand, firefox throws a
Unable to bind to locking port 7054 within 45000 ms
Research shows that the reason behind this is that I must have left another firefox webdriver not closed/not quit. But this defeats my using selenium to automate web tasks, in a multi threaded manner. I mean, after a couple of threads are opened, seems it reaches some limit and waits for one of the opened webdrivers to close.
Actually, from this firefox webdriver's documentation, they make it clear that only one instance is supposed to be running. What one is supposed to do then if he had in mind multi threading ?
Does any one have working solutions for the problems singled out in the table, for each specific webdriver implementations ?
No, you can run multiple instances of firefox, chrome, or whatever from your machine at any one time. If you research "Selenium Grid", you will see that it is designed to do that.
So:
The unable to bind message on firefox is not caused by another driver locking a port. Each driver instance starts on its own open port.
If you are not using Selenium Grid, or not using the grid, and are trying to handle the multi-threading yourself, just be careful of how you open and close your browsers in your #Configuration phases in your test runner.
As a educated guess, if you have instability, its more likely because you are trying to control a newer browser with a too-old version of Selenium? We need more info on your question, such as an example project to look at.

Protractor/Selenium: run browser in the background

I'm using protractor for testing. 99% of the times there's no need to actually see the browser, the tests take a long time, and all we're interested in is the final outcome.
Is there a way to hide the browser opened for testing (e.g. run in the background)?
As stated before, docker-selenium works wonders. The only browser not supported by docker-selenium is Internet Explorer, for obvious reasons.
From what I understand, you cannot really reliably control the way browser windows are opened via protractor/webdriverjs/selenium.
A common way to approach the problem is to use a virtual display, see:
Can Selenium Webdriver open browser windows silently in background?
An alternative way to accomplish that, would be to run tests inside a docker-selenium container, here is a quite detailed introduction:
protractor with any headless browser?
Or, as pointed out here and if you are on Mac OS X, you can run selenium tests on the same machine but under a different user which would not interfere with your current display.
You can also run protractor tests in a docker container in a headless firefox:
Protractor-Firefox-Headless-Docker
Another alternative would be to use a remote selenium server, as, for example, BrowserStack or Sauce Labs services provide.
You can try headless browser like PhantomJS for this purpose. PhantomJS runs in background and failures can be captured using screenshot.
Refer following link to know more about phantomjs:
Protractor running tests on PhantomJS

Is it possible to run phantomjs by using IE desired capabilities?

By default phantomjs uses chrome capabilities. Is it possible to run it with IE capabilities .If so, I need to use it for page-object gem like:
#browser = Watir::Browser.new(:phantomjs, args: '--ignore-ssl-errors=true')
Can any body please provide me any solution for it.
The quick answer is no: Phantom is using the same WebKit rendering engine that Chrome/Safari uses (*), so cannot act like IE.
You might be interested in TrifleJS which is a headless IE port of PhantomJS. (The project is in the early stages, and (AFAIK) won't work with CasperJS yet, and does not seem to support selenium integration either yet.)
*: More precisely, Phantom 1.9 is equivalent to about Chrome 13. And recent versions of Chrome use Blink, not WebKit. So Phantom 2.x, when finally released, won't be equivalent to any version of Chrome.

Protractor Internet Explorer Slowness

I've been trying to get Internet Explorer 11 to run under Protractor to complete a suite of tests I have for an new AngularJS project.
I'm running under Windows 7 - 64 Bit and have downloaded and installed the Selenium IEDriverServer.exe for 64 Bit.
When I go to launch Protractor and run the scenarios, Internet Explorer comes up and navigates to the page just fine, but when the scenario sends keys to an input field it is extremely slow, like about 15 seconds between each key press. And Selenium is not showing any type of exception being thrown.
Has anyone seen this behavior before and found a solution?
Thanks
It's a known bug or "issue" (not a bug within the IEDriver however):
http://code.google.com/p/selenium/issues/detail?id=3072 (references IE10 but the point & solution is the same fundamentally)
It is explained in the Selenium issue tracker, but the workaround will be to use the 32bit version of the driver. Realistically you don't get "much" from using the explicit 64bit version.
I'd also say you may have further problems with IE11. Selenium doesn't support IE11 fully yet.
https://code.google.com/p/selenium/issues/detail?id=6437#c7 (among other issues)
You are probably, long term, better off downgrading to IE10 and using the 32bit driver.

Flash - Why doesn't my SharedObject get saved on disk when closing IE?

I have a Flash application that uses SharedObject to save and read some data locally. As it is said everywhere Flash saves the data from the shared object to disk when the application is closed. And indeed it does when I test it with the stand-alone Flash Player or all of these browsers: Firefox, Opera, Safari, Chrome, Flock... But it doesn't work when I use IE (I've tried IE6 and IE7).
Does anyone know anything about this issue? Why might it be happening... and how to get it to work?
Are you using MultipleIEs or standalone versions of the IE browsers? I've had issues with that as it seems they don't work properly when installed together.
The best way to be sure is testing your application on someone else's computer with only one version of IE installed.
EDIT: Check out the hints below:
It seems that if you install things in a special order evrything seems to work better.
Install/upgrade to IE8
Install standalone IE7
Install MultipleIEs (IE6 and below)
Also check the IE Collection (finalbuilds.edskes.net/iecollection.htm) tool instead of MultipleIEs for better results.

Resources