Automated testing of rendering in browsers - testing

Can Selenium or any other automated tool check for the proper positioning of elements on a web page?
For example, when you look at OnStartups.com in IE 6, the main content that is supposed to be to the right of the menu is below it instead and you have to scroll down to read it. Can you query and get the coordinates of the div as they are actually displayed, and can you get the coordinates of the viewport to verify that the top left corner is actually within the viewable area?

I think comparing screenshots is the best thing you can do and I'm afraid there aren't robust tools for that, yet.
If I were you, I would create a script that navigates through every page of the site capturing a picture on each and then I would open a folder with all the results and it would probably take less than a minutes to check 20 or 30 of them. Sounds really dumb, but sometimes the easier alternative ends up being the best...

I'm afraid the best you could do is select a standard browser and than compare screenshots of other browser with the reference one.
I can't remember the specific one but some tool like Araxis merge was able to compare screenshots in a pretty intelligent way.

Selenium has assertions to check an element's position and size:
assertElementHeight(locator,pattern)
assertElementWidth(locator,pattern)
assertElementPositionLeft(locator,pattern)
assertElementPositionTop(locator,pattern)
A simple test to check the rendering in the OPs example could be to write
assertElementPositionTop(//*[#id='main_content'],0)
thus checking whether #main_content is rendered at the top or somewhere else.

Related

Get display coordinates of tab using chromedriver and selenium

I am looking to find the co-ordinates to a specific tab in a chromedriver instance controlled by selenium.
The scenario is as follows: I have a chromedriver instance automated with selenium that contains multiple tabs. I am looking to pin specific tabs (not all of them) and in order to do that, I am using autoit to send the necessary mouse and keyboard commands to pin the actual tab. However, in order to do that, I need to know the screen/display coordinates of the tab (so I can send the mouse there).
The chromedriver has the coordinates to the actual browser, however I have been unable to find any reference to the coordinates of the tab.
Does anyone know how I could go about getting the coordinates of a specific tab?
Update: I am using c#
It would be a big help if you let me know what language you are coding the tests in, however this can be achieved through checking the position of your scrollbar as the AI does not have a monitor to be limited to a resolution, essentially it can see the whole of the web-page no matter what.
Below is a link to some of the usage for checking and comparing the scrolled status, even if this isn't a direct solution i'm positive it will point you in the right direction. (This is something i had to do not very long ago)
http://www.software-testing-tutorials-automation.com/2015/02/how-to-verify-scroll-present-on-browser.html
If you have any queries let me know,
All the best, Jack

How to add scrolling option on component parameter GUI?

I'm using Dymola but I expect OpenModelica might very well be the same (or at least similar).
For a given component model sometimes it makes more sense to have lots of parameters shown on one "tab" of the parameter GUI. This can lead to an excessively long GUI which, for many reasons including for psychological reasons in relation to how humans process information, is not a appropriate solution.
To solve this I would like to add a vertical scroll bar on the parameter GUI. I believe I saw it once though I cannot recall exactly where.
For illustrative purposes look to the right side of your web browser window. That gray bar that goes up and down is the scrollbar :). I know, obvious but you never know.
I assume I need to put some command in an annotation somewhere though where and what command I am not sure. For example, I found some reference to a verticalScrollBarPolicy but alas, I can not find any documentation on this.
Anyone know how to do this?
EDIT #1:
Dymola (and Adrian indicated OpenModelica as well) will automatically create the scroll bar when the GUI gets larger than the screen. Unfortunately (at least in Dymola) there is little margin so if you GUI is a fraction smaller than the window the "OK" button will be covered by the ribbon on the bottom of the screen and the GUI will be needed to made slightly larger to make the scroll bar appear automatically. This is a reason why a manual option for a scrollbar would come in handy.
I think additional "tabs" might help?
As far as I know in OpenModelica we have a scroll bar for that dialog windows if the window would expand out of the screen.
As of this posting my understanding based on feedback on this forum, my own experience, and from additional discussions with others there is no current manual control of the GUI (i.e., size, scrollbars, etc.).
Your best bet if you come across issues (e.g., you have a super small 2nd monitor) is to use lots of tabs and keep descriptions very short (which is probably appropriate for most applications anyways).
This is a Dymola and OpenModelica issue not a modelica issue as it is not contained in the modelica specification (as I understand it).
If this changes and I find out about it I'll remove or update this post.

Selenium element.click() does not work

Hello: I am using Selenium/Java to grab a PDF from a website. The website does not generate them in advance, but only after I clink on a link. When I do, the web server goes away for a few minutes, and then comes back with the content.
I'm using Firefox, and its built-in PDF viewer. When I click on the download link from the main browser window, it opens another window to receive the PDF content. In a few minutes the child window is filled with the PDF content, and all I need to do is click a download button on the Firefox toolbar, and then press a Save button on the confimration dialog. I have done both of these things, successfully, sometimes.
My problem, sometimes occurs when I execute the code to click on the child window's download button...
WebElement element = driver.findElement(By.id("download"));
element.click();
Sometimes, it just doesn't work. The statement:
driver.findElement(By.id("download"))
...never throws an exception, so it appears to always be successful. Yet, the subsequent element.click() will often not produce the expected results.
I've thrown about 100 darts at this problem, but I can't seem to find one that produces consistent results. I've tried introducing delays, calling findElement several times, trying to use the driver on the child window in ways to confirm its connection to that window (all with positive return values), but nothing seems to help make element.click() on the darn download link successfull.
I have found Selenium to be a rock-solid solution, especially when working through the primary window...it never misses a beat, and I'm really quite impressed about that behavior. This is my first Selenium project, and I hoping someone that has used it a bit more, might have a suggestion for this particular problem.
It's hard to answer this question without additional information about how the child window is populated. If the child window is using javascript to add the button to the page and define its behavior (which is likely), then the element could be actually present on the page when you look for it (i.e. no error will be thrown), but it might not be active yet or prepared to be clicked.
It might be a good idea to look at the element definition in the source for the child page to get a better idea of how the button is coded. If you have access to the web developers who designed/implemented the button even better. If you can wait to perform the click action until the button is in the desired state, this should solve the problem.
Additionally if the page is coded using a dynamic framework like Angular, you might be better off using Protractor for testing, which is based off of Selenium, but which is aware of updates in the view as they are occurring.

LINQPad: Anyway to make the Dump() results be initially collapsed?

Couldn't find it anywhere (google or stackoverflow).
Is there a way to force Dump()'s output to be automatically collapsed?
Update:
Some more info, to bring more focus to the question.
As mentioned below Collapsing can be done after the output as rendered via keyboard shortcust (Alt+1, Alt+2, Alt+3)
And can rendering depth can be determined by passing an int depth param, but that does not allow to expand the results.
Is there some way to change the CSS formatting? I'm not that fluent in CSS, so this might be the solution.
Why I need this:
What I want is to make the output 'cleaner', and dive in when something of interest show's up.
I'm running a query repeatedly, and don't need all of the output all the time, but still using my human abilities to detect change, instead of coding the detection.
Update: November 2013
As Joe (the author himself!) mentions in the comments, LINQPad no longer has the limitation described.
It is now possible to state 0 and collapse the information after it's rendered.
No, although you can call Dump with a number to force it to display to that nesting depth:
.Dump(0)
You can also use the formatting shortcuts (Alt+1, Alt+2, Alt+3) to collapse the whole display to one, two or three levels.
Another option is to dump to grids. Call Dump(true) or use the toolbar button. Grids show only one level and subsequent levels are shown upon demand with hyperlinks.

Surface Table Project with Web Browsers

I'm working on a project that will use a Surface table to show web browsers that can be manipulated via the multitouch behaviors. I'd like to be able to show a browser at full screen and then resize, move, etc.
I'd also like to be able to launch a new, separate browser windows that can also be manipulated through multitouch.
Any suggestions on controls to look into for this?
Thanks!
This is a non-trivial task. As far as I know, many have tried and put months of effort into it but none of been very successful. Don't even bother trying to get something to work well based on WPF's built in WebBrowser control. Best bet is to start with the SurfaceScatterView control and trying to put a 'Chromium' control inside of it (http://wpfchromium.codeplex.com/). It appears that even this isn't straightforward though: http://wpfchromium.codeplex.com/discussions/244117