How to check ready state for Firefox using RFT - automation

I have been working on a web app, and it was designed for Firefox only.
The getProperty(".readyState") always return 4 >> READY even if the page is still loading.
I already tried the following:
- image comparison using Robot (NO LUCK)
- waitForExistence
readyState is an IE property and it seems it is not working properly using Firefox.
any help from the experts are greatly appreciated. Thanks

Try using waitForExistence on some object on the page that signifies that it is ready. That is, rather than waitForExistence on the page itself, waitForExistence on a child object of that page. For example, if a certain link or button is only available when the page is ready, sync on that.
If this is a page with asynchronous requests running in the background, RFT does have functions which allow you to sync on completion of ajax requests. See the RFT online help docs for ajax support.

Related

Selenium - Element not visible when the browser set to mobile responsive mode

I am testing the browser for mobile responsiveness. I changed the browser window size to iPhone 5 which is 320 x 568 using this command
driver.Manage().Window.Size = new Size(320, 568);
When I run the test, the browser opens fine according to the mentioned size without any issue. But it fails to find a hyperlink text which is displayed on the page. I get Element not visible exception when I could actually see the link text on the screen. So, could anyone help me solve this issue or have any ideas that I could try?
Any help would be highly appreciated.
Thanks.
Perhaps it's due to the time delay, that means code executes even before the link appears, So write the following code in your language
Code from Ruby Selenium-binding
wait = Selenium::WebDriver::Wait.new(timeout: 10) # seconds
wait.until { driver.find_element(id: "foo").displayed? }
driver.find_element(id: "foo").click
Try to scroll to the element.
You could use java script to do that.
In Python this can be done via
WebDriver.execute_script("arguments[0].scrollIntoView();", elem)
Some elements of the DOM of the webpage change when you test for mobile responsiveness, so selenium is unable to locate the element that you are specifically trying to target.So, you should try to debug and find the methods where the code is failing to perform the action.Then you should find the locators for those elements in "mobile responsiveness view" and trigger only those methods when you are testing for mobile.

Auto suggest/complete not loading in webdriver browser instances

I'm having a little trouble nailing down what's causing a particular issue. I'm fairly new to automation testing and I'm having a strange problem. The website I'm testing has an auto suggest function which works absolutely fine when checking manually. The problem is when loading a browser using the Selenium webdriver (I've tried firefox, chrome and IE drivers) that the auto suggest is simply not loading.
It's like the part of the page to do with that and a date/time mini popup aren't loading at all so none of them work when running scripts. Has anyone else had this and resolved it? or is it an issue with the web page itself?
Thanks
You may need to fire an event which by default webdriver is not envoking with sendKeys.
Asking you developer how it works in their code, and then extend selenium to replicate this behaviour.
Also, have you tried do sendKeys one character at a time with a small sleep in-between

WebKit Implementation with c#

I implemented webKit into a c# app i'm using and it works great except for one problem. Let me give a background of what i'm using it for.
This is a program i've been building that will run multiple tests on multiple customer accounts, it loads each test into it's own dynamically created browser controls and such. However the issue i'm having is that some of the tests use Iframes which pass information in between the parent and child pages. These Iframes run a few ajax commands that show that they are loading, however it doesn't finish executing whatever scripts it needs to run. Is there something i need to change in the way I've added WebKit to my application or anyone else that has had any similar problems? These tests work in chrome and safari as well so i know webkit can do it, but for some reason it's not doing it for me.
Thanks for the help!

Take screenshot with Selenium: WaitForPageToLoad does not wait long enough

I'm trying to get screenshots from a web page with multiple browsers. Just experimenting with Selenium RC, I wrote code like this:
var sel = new DefaultSelenium(server, 4444, target, url);
sel.Start();
sel.Open(url);
sel.WaitForPageToLoad("30000");
var imageString = sel.CaptureScreenshotToString();
This basically works, but in most cases the screenshot is of a blank browser window, because the page is not yet ready for display. It kind of works if I add a sleep just after the WaitForPageToLoad, but that slows down the fast browsers and/or may be to short for the slower browsers (or under load).
A typical solution for this seems to be to wait for the presence of a certain element. However, this is meant as a simple generic solution to get a screenshot of a local web page with as many browsers as possible (to test the layout) and I don't want to have to enter certain element names or whatever. It's a simple tool where you just enter the Selenium Server URL and the URL you want to test, and get the screenshots back.
Any advice?
I use Selenium-RC to capture screenshots of remote pages where the waiting time is variant. In such cases, checking the title of the page and using time.sleep(n seconds) usually does it for me.
May be you can make use of Browser status bar to verify whether that page is loaded fully or not. I think this is the best solution.

Getting DOM from page using Chromium/WebKit

Trying to get access to a page's DOM after rendering. I do not need to view the page and plan to apply this programmatically without any GUI or interaction.
The reason I am interested in post-rendering is that I want to know where objects appear. Some location information is coded in the HTML (e.g., via offsetLeft), but much is not. Also, Javascript can change the ultimate positioning. I want positions that are as close to what the user will see as possible.
I've looked into Chromium code and think there is a way to do this but there is not enough documentation to get started.
Putting it VERY simply I'd be interested in pseudo-code like this:
DOMRoot *r = new Page("http://stackoverflow.com")->getDom();
Any tips on starting points?
You should use the Web API wrapper that Chromium exposes; specifically, the WebDocument class contains the functionality that you need. You can call it like this:
WebFrame * mainFrame = webView->mainFrame();
WebDocument document = mainFrame->document();
WebElement docElement = document->docElement();
// Manipulate the DOM here using docElement
...
You can browse the source code for Chromium's Web API wrapper here. Although there's not much in the way of documentation, the header files are fairly well-commented and you can browse Chrome's source code to see the API in action.
It's difficult to get started using Chromium. I recommend looking at the test_shell application. Also, a framework like the Chromium Embedded Framework (CEF) simplifies the process of embedding Chromium in your application; I use CEF in my current project and I'm very satisfied with it.