Hi Chip,

For following::


[CHIP]
In your design doc, you mention that Main.py will be the executable file.  
Either it needs to support flags to trigger different suites, or it can simply 
be exploded into multiple "main" files that drive the correct suite.

[PARTH]
Yes, Main .py is the executable.
We import other modules
Each class in each module is a test case.
And then we serialize them into main.


[CHIP]
As for element locators, you're right about the difficulty in the current page 
DOM.  XPath seems to be the only reasonable way for now.

[PARTH]
Xpath is least reliable. ID and Name tops the reliability. But for now no 
choice.
However I have created a global file which looks like

# Selects Templates from drop down
template_xpath = 
"/html/body/div/div/div[2]/div[2]/div[2]/div/div[2]/div/div/div/select/option[1]"

# Selects ISO from drop down
iso_xpath = 
"/html/body/div/div/div[2]/div[2]/div[2]/div/div[2]/div/div/div/select/option[2]"

# Add Template
AddTemplate_xpath = "//div[3]/span"

We are essentially using these variables across all the classes and modules. So 
in event of script failure we look at the element location (using xpath finder) 
and match it with our global file. If they differ we update accordingly.
Also note that terminal elements (ones that are reachable by only one way, Like 
a house on dead end street) I have hard coded them into scripts. Because if 
these paths change and scripts fail we know where to look at.

Also, all similar test cases say service offerings are in one module 
service_offerings.py.  which contains disk/compute/system offerings with 
Add/Edit and Delete test cases.
We should be able to perform a replace easily if needed.



[CHIP]
I'd assume that we would want to open bugs on key elements that should actually 
have an ID, to make the test suite a bit more robust (less prone to issues as 
the UI is tweaked over time).
[PARTH]
Absolutely.


Thanks,
.. Parth


-----Original Message-----
From: Chip Childers [mailto:chip.child...@sungard.com] 
Sent: Wednesday, February 13, 2013 11:44 AM
To: cloudstack-dev@incubator.apache.org; Parth Jagirdar
Subject: Re: [DISCUSS] UI automation using Python/Selenium

On Thu, Jan 17, 2013 at 10:09:06PM +0000, Parth Jagirdar wrote:
> Here is cwiki link...
> 
> https://cwiki.apache.org/confluence/display/CLOUDSTACK/UI+Automation+u
> sing+Selenium+and+Python

Following up on this...

First, I love this initiative and want to help.  Since you don't have commit 
rights, do you want to push to a github repo where others can fork and submit 
pull requests for the feature?

A couple of comments on your PDF document (although it might be better if the 
content was actually on the wiki page for collaboration):

I'd like to suggest that the tests are classified, based on the external 
dependencies that they will require.  For example, running tests against a 
DevCloud2 image / VirtualBox varient with nothing configured, vs.
basic zone enabled vs. advanced zone enabled, etc...  You get the point.
We need to be able to select the appropriate suite of tests at the time they 
are run, but have them pre-classified for testers.

I've always used some form of a headless setup for running tests, and have 
tended to use individual python files to group the raw tests in ways similar to 
what I'm suggesting above.

The more these tests are tied to configurations that are also stored in the 
repo, the better (in my example, the devcloud.cfg files are the right way to 
start).

In your design doc, you mention that Main.py will be the executable file.  
Either it needs to support flags to trigger different suites, or it can simply 
be exploded into multiple "main" files that drive the correct suite.

As for element locators, you're right about the difficulty in the current page 
DOM.  XPath seems to be the only reasonable way for now.
I'd assume that we would want to open bugs on key elements that should actually 
have an ID, to make the test suite a bit more robust (less prone to issues as 
the UI is tweaked over time).

The section that talks about Dynamically Generated elements is good, and that 
proposed approach will work.  It's potentially brittle though.  The only other 
idea I had was to allow the python code to call into the CS API at appropriate 
times to determine bits of data that are necessary to the UI automations.

Thoughts?

-chip

Reply via email to