Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(988)

Unified Diff: components/test/data/password_manager/README

Issue 273523004: Password Manager testing automation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: new arch Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/test/data/password_manager/README
diff --git a/components/test/data/password_manager/README b/components/test/data/password_manager/README
new file mode 100644
index 0000000000000000000000000000000000000000..67b6c50bd219b15b62c91bbd01a55e911cd3b90d
--- /dev/null
+++ b/components/test/data/password_manager/README
@@ -0,0 +1,171 @@
+This file contains high-level info about how to use password manager tests and
+how to create new ones.
+
+The password manager tests purpose is to allow automatic password manager
+checking and avoiding to do so manually.
+The tests are written in python using selenium Webdriver library.
+
+
+=====Getting started=====
+
+Build ChromeDriver by building the 'chromedriver' target. This will
+create an executable binary in the build folder named 'chromedriver[.exe]'.
+
+Build chrome too by building the 'chrome' target. This will
+create an executable binary in the build folder named 'chrome[.exe]'.
+
+Install Selenium (the version tested was 2.41.0):
+pip install -U selenium
+
+
+For security reasons, we didn't publish the passwords and the usernames we
+used to test. So we put them to an xml file (websites.xml). The structure of
+the file is the following:
+<websites>
+ <website name = "website name">
+ <username>username</username>
+ <password>password</password>
+ </website>
+<websites>
+You can ask someone to give you the websites.xml file and put it in the same
+folder as the tests. You can also create your own websites.xml with your
+personal accounts.
+
+Run all the working tests tests by executing:
+python tests.py --chrome-path CHROMEPATH --chromedriver-path CHROMEDRIVERPATH
+--profile-path PROFILEPATH [--passwords_path PASSWORDSPATH]
+
+Run all the tests by executing:
+python tests.py --all --chrome-path CHROMEPATH --chromedriver-path
+CHROMEDRIVERPATH --profile-path PROFILEPATH --passwords_path PASSWORDSPATH]
+
+Run one or many tests by executing:
+python tests.py --chrome-path CHROMEPATH --chromedriver-path CHROMEDRIVERPATH
vabr (Chromium) 2014/05/14 15:16:09 Is this command the same as the one for "Run all t
rchtara 2014/05/15 09:39:11 Done.
+--profile-path PROFILEPATH [--passwords_path PASSWORDSPATH]
+
+python tests.py google --chrome-path CHROMEPATH --chromedriver-path
+CHROMEDRIVERPATH profile-path PROFILEPATH [--passwords_path PASSWORDSPATH]
+
+python tests.py google facebook --chrome-path CHROMEPATH --chromedriver-path
+CHROMEDRIVERPATH --profile-path PROFILEPATH [--passwords_path PASSWORDSPATH]
+
+python tests.py google facebook amazon --chrome-path CHROMEPATH
+--chromedriver-path CHROMEDRIVERPATH --profile-path PROFILEPATH
+[--passwords_path PASSWORDSPATH]
+
+
+=====Creating new test=====
+
+1) Open tests.py.
+
+2) Add these lines :
+website = environment.AddWebsite("website name",
+ "username",
+ "password")
+* For security reasons, you can use websites.xml which is a private to keep
+your passwords. You have to add the following line to the xml file:
+
+<website name = "website name">
+ <username>username</username>
+ <password>password</password>
+</website>
+
+Then, to create the new test, you need just to add:
+class NEWWEBSITE(Website):
vabr (Chromium) 2014/05/14 15:16:09 Using all-caps for class name is against the Pytho
rchtara 2014/05/15 09:39:11 Done.
+
+def Login(self):
+ self.GoTo("hhtp://url")
vabr (Chromium) 2014/05/14 15:16:09 hhtp->http
rchtara 2014/05/15 09:39:11 Done.
+ self.FillUsername("#username")
vabr (Chromium) 2014/05/14 15:16:09 What do you actually mean by #username, #password?
rchtara 2014/05/15 09:39:11 Done.
+ self.FillPassword("#password")
+ self.Submit("#password")
+
+def Logout(self):
+ self.Click("#logout")
+
+environment.AddWebsite(
+ Yahoo("NEWWEBSITE("http://url", username_not_auto=True))
vabr (Chromium) 2014/05/14 15:16:09 There is an odd number (3) of quotation marks in t
rchtara 2014/05/15 09:39:11 Done.
+
+
+3) Use the flowing methods to perform the login and logout:
+The methods that you can use are:
+* Click: find an element using CSS Selector and click on it.
+self.Click("css_selector")
+* ClickIfAvailable: find an element using CSS Selector and if it's available,
vabr (Chromium) 2014/05/14 15:16:09 Please elaborate on what's the difference between
rchtara 2014/05/15 09:39:11 Done.
+click on it.
+self.ClickIfAvailable("css_selector")
+* Enter: find an element using CSS Selector and send enter to it.
+self.Enter("css_selector")
vabr (Chromium) 2014/05/14 15:16:09 nit: Enter -> SendEnterTo (The literal meaning of
rchtara 2014/05/15 09:39:11 Done.
+* GoTo: go to some url.
vabr (Chromium) 2014/05/14 15:16:09 What does "go to" mean? Navigating the main frame?
rchtara 2014/05/15 09:39:11 Done.
+self.GoTo("url")
+* Hover: find an element using CSS Selector and hover it.
vabr (Chromium) 2014/05/14 15:16:09 hover it -> hover over it
rchtara 2014/05/15 09:39:11 Done.
+self.Hover("css_selector")
vabr (Chromium) 2014/05/14 15:16:09 optional nit: Hover -> HoverOver
rchtara 2014/05/15 09:39:11 Done.
+
vabr (Chromium) 2014/05/14 15:16:09 Why the blank line? Unless it separates different
rchtara 2014/05/15 09:39:11 Done.
+* IsDisplayed: check if an element is displayed.
+self.IsDisplayed("css_selector")
+* Wait: wait for some amount of time.
vabr (Chromium) 2014/05/14 15:16:09 Please mention units. (Seconds?)
rchtara 2014/05/15 09:39:11 Done.
+self.Wait(10)
+* WaitUntilDisplayed: wait for an element defined using CSS Selector to be
+displayed.
+self.WaitUntilDisplayed("css_selector")
+
+
+* FillPassword: find an input element using CSS Selector and fill it with
vabr (Chromium) 2014/05/14 15:16:09 nit: FillPasswordInto, FillUsernameInto Just Fill
rchtara 2014/05/15 09:39:11 Done.
+the password.
+self.FillPassword("css_selector")
+* Fillusername: find an input element using CSS Selector and fill it with
+the username.
+self.FillUsername("css_selector")
+* OptionalFillUsername: find an input element using CSS Selector and fill it
vabr (Chromium) 2014/05/14 15:16:09 nit: OptionalFillUsername -> FillUsernameIfVisible
rchtara 2014/05/15 09:39:11 Done.
+with the username. Do nothing if the input element is not visible.
vabr (Chromium) 2014/05/14 15:16:09 Is "doing nothing" the important difference? Or wo
rchtara 2014/05/15 09:39:11 Done.
+self.OptionalFillUsername("css_selector")
+* Submit: find an element using CSS Selector and submit it.
vabr (Chromium) 2014/05/14 15:16:09 optional nit: submit it -> call its submit() handl
rchtara 2014/05/15 09:39:11 Done.
+self.Submit("css_selector")
+
+
+=====Files structure=====
+
+Classes:
+* environment.py: the definition the tests Environment.
+* website.py: Website is defined here. You need to create an instance of this
+class for each website you want to test.
+
+Tests:
+* tests.py: the tests setup and the configuration for each website happens
+here. This file contain 3 separate kinds of tests:
+
+1) working tests: tests that are supposed to work. If you have a problem with
+one of them, rerun it again. Or try using the Known Issues section to fix it.
+2) tests that can cause a crash (the cause of the crash is not related to the
+password manager): This means that this set is expected to become a working
+test or failing test when the issue that causes the crash now is solved.
+3) failing tests: tests that fail for known bug related to the password
+manager. When this bug is solved, all the tests that were failing because of
+it are going to be moved to working tests.
+
+Other files:
+* websites.xml : a private file where you can find all the passwords. You can
+ask someone to give it to you or just create your own with your personal
+accounts.
+<websites>
+ <website name = "website name">
+ <username>username</username>
+ <password>password</password>
+ </website>
+</websites>
+
+
+=====Known Issues=====
+
+The tests are very fragile. Here are some suggestions for solving most of the
+problems:
+* Restart the tests.
+* Remove the profile if the tests fail at the beginning for unknown reason.
+* If tests fail, isolate the one that causes problem, read the log and keep
+your eyes on the browser window to understand its causes:
+a) In the tests, we often need to wait for a menu to appear ... If the
+menu takes more time to appear than expected, the tests are going to fail.
+b) The websites change very often. And even if they are not changed, they some
+time show a popup that broke the tests. In the case you need to login manually
+to the website, close all popup and logout.
+* If you are logged in when the tests crashes, don't forget to log out before
+running the tests a second time.

Powered by Google App Engine
This is Rietveld 408576698