Working with Selenium, sometimes happen you require to run some complex scenarios and many times it fails as well. Like I was using file download scenario in selenium and it is working but sometimes God knows why it fails. There are many things which even SeleniumHQ itself does not recommend you to test with Selenium. Selenium can work on automation but there is limitation which YOU SHOULD NOT PRACTICE in Selenium and below are some of them.
CAPTCHAS (My Favorite)
CAPTCHA, short for Completely Automated Public Turing test to tell Computers and Humans Apart, is explicitly designed to prevent automation, so don’t try! There are two primary strategies to get around CAPTCHA checks:
- Disable CAPTCHAs in your test environment
- Add a hook to allow tests to bypass the CAPTCHA
Whilst it is possible to start a download by clicking a link with a browser under Selenium’s control, the API does not expose download progress, making it less than ideal for testing downloaded files. This is because downloading files is not considered an important aspect of emulating user interaction with the web platform. Instead, find the link using Selenium (and any required cookies) and pass it to an HTTP request library like libcurl.
HTTP RESPONSE CODES
For some browser configurations in Selenium RC, Selenium acted as a proxy between the browser and the site being automated. This meant that all browser traffic passed through Selenium could be captured or manipulated. The method
captureNetworkTraffic() purported to capture all of the network traffic between the browser and the site being automated, including HTTP response codes.
Selenium WebDriver is a completely different approach to browser automation, preferring to act more like a user and this is represented in the way you write tests with WebDriver. In automated functional testing, checking the status code is not a particularly important detail of a test’s failure; the steps that preceded it are more important.
The browser will always represent the HTTP status code, imagine for example a 404 or a 500 error page. A simple way to “fail fast” when you encounter one of these error pages is to check the page title or content of a reliable point (e.g. the <h1> tag) after every page load. If you are using the page object model, you can include this check in your class constructor or the similar point where the page load is expected. Occasionally, the HTTP code may even be represented in the browser’s error page and you could use WebDriver to read this and improve your debugging output.
Checking the webpage itself is in line with WebDriver’s ideal practice of representing and asserting upon the user’s view of the website.
If you insist, an advanced solution to capturing HTTP status codes is to replicate the behavior of Selenium RC by using a proxy. WebDriver API provides the ability to set a proxy for the browser, and there are a number of proxies that will programmatically allow you to manipulate the contents of requests sent to and received from the web server. Using a proxy lets you decide how you want to respond to redirection response codes. Additionally, not every browser makes the response codes available to WebDriver, so opting to use a proxy allows you to have a solution that works for every browser.
GMAIL, EMAIL, AND FACEBOOK LOGINS
For multiple reasons, logging into sites like Gmail and Facebook using WebDriver is not recommended. Aside from being against the usage terms for these sites (where you risk having the account shut down), it is slow and unreliable.
The ideal practice is to use the APIs that email providers offer or in the case of Facebook the developer tools service which exposes an API for creating test accounts, friends and so forth. Although using an API might seem like a bit of extra hard work, you will be paid back in speed, reliability, and stability. The API is also unlikely to change whereas web pages and HTML locators change often and require you to update your test framework.
Logging in to third-party sites using WebDriver at any point in your test increases the risk of your test failing because it makes your test longer. A general rule of thumb is that longer tests are more fragile and unreliable.
WebDriver implementations that are W3C conformant also annotate the
navigator object with a
webdriverproperty so that Denial of Service attacks can be mitigated.
A common idea and misconception about automated testing are regarding a specific test order. Your tests should be able to run in any order, and not rely on other tests to complete in order to be successful.
Performance testing using Selenium and WebDriver is generally not advised. Not because it is incapable but because it is not optimised for the job and you are unlikely to get good results.
The other potential attraction is “saving time” — carrying out functional and performance tests at the same time. However, functional and performance tests have opposing objectives. To test functionality, a tester may need to be patient and wait for loading, but this will cloud the performance testing results and vice versa.
Example (open source) packages to use are: Jmeter?
Using WebDriver to spider through links is not a recommended practice not because it cannot be done, but because it’s definitely not an ideal tool. WebDriver needs time to start up and can take several seconds up to a minute depending on how your test is written, just to get to the page and traverse through the DOM.
Instead of using WebDriver for this, you could save a ton of time by executing a curl command or using a library such as BeautifulSoup since these methods don’t rely on creating a browser and navigating to a page. You are saving tonnes of time by not using WebDriver for this task.
Courtesy & Credits: SeleniumHQ Github