1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# -*- coding: utf-8 -*-
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# found in the LICENSE file.
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)"""Automated tests for many websites"""
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import argparse
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)import logging
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)from environment import Environment
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)from websitetest import WebsiteTest
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TypeOfTestedWebsites:
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  """An enum to specify which groups of tests to run."""
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # Runs only the disabled tests.
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISABLED_TESTS = 0
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # Runs only the enabled tests.
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ENABLED_TESTS = 1
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # Runs all the tests.
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ALL_TESTS = 2
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  # Runs a specified list of tests.
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  LIST_OF_TESTS = 3
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  def __init__(self):
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    pass
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Facebook(WebsiteTest):
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://www.facebook.com")
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("[name='email']")
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("[name='pass']")
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("[name='pass']")
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Google(WebsiteTest):
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://accounts.google.com/ServiceLogin?sacu=1&continue=")
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#Email")
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("#Passwd")
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("#Passwd")
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Linkedin(WebsiteTest):
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://www.linkedin.com")
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#session_key-login")
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("#session_password-login")
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("#session_password-login")
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Mailru(WebsiteTest):
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://mail.ru")
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#mailbox__login")
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("#mailbox__password")
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("#mailbox__password")
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Nytimes(WebsiteTest):
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://myaccount.nytimes.com/auth/login")
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#userid")
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("#password")
72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("#password")
73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Pinterest(WebsiteTest):
76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://www.pinterest.com/login/")
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("[name='username_or_email']")
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("[name='password']")
81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("[name='password']")
82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Reddit(WebsiteTest):
85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("http://www.reddit.com")
88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Click(".user .login-required")
89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#user_login")
90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("#passwd_login")
91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Wait(2)
92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("#passwd_login")
93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
95cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Tumblr(WebsiteTest):
96cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
97cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
98cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://www.tumblr.com/login")
99cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#signup_email")
100cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("#signup_password")
101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("#signup_password")
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
10403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class Twitter(WebsiteTest):
10503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
10603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  def Login(self):
10703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.GoTo("https:///twitter.com")
10803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.FillUsernameInto("#signin-email")
10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.FillPasswordInto("#signin-password")
11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.Submit("#signin-password")
11103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
11203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Wikipedia(WebsiteTest):
114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://en.wikipedia.org/w/index.php?title=Special:UserLogin")
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#wpName1")
118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("#wpPassword1")
119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("#wpPassword1")
120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
12203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class Yahoo(WebsiteTest):
12303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
12403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  def Login(self):
12503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.GoTo("https://login.yahoo.com")
12603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.FillUsernameInto("#username")
12703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.FillPasswordInto("#passwd")
12803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.Submit("#passwd")
12903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
13003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Yandex(WebsiteTest):
132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
134cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://mail.yandex.com")
135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#b-mail-domik-username11")
136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("#b-mail-domik-password11")
137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Click(".b-mail-button__button")
138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Disabled tests.
141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Bug not reproducible without test.
144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Amazon(WebsiteTest):
145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo(
148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        "https://www.amazon.com/ap/signin?openid.assoc_handle=usflex"
149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        "&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net"
150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        "%2Fauth%2F2.0")
151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("[name='email']")
152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("[name='password']")
15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.Click("#signInSubmit-input")
154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
155cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
156cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Password not saved.
157cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Ask(WebsiteTest):
158cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
159cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
160cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("http://www.ask.com/answers/browse?qsrc=321&q=&o=0&l=dir#")
161cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    while not self.IsDisplayed("[name='username']"):
162cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self.Click("#a16CnbSignInText")
163cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self.Wait(1)
164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("[name='username']")
165cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("[name='password']")
166cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Click(".signin_show.signin_submit")
167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Password not saved.
170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Baidu(WebsiteTest):
171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
17303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.GoTo("https://passport.baidu.com")
174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("[name='userName']")
175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("[name='password']")
176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("[name='password']")
177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# http://crbug.com/368690
180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Cnn(WebsiteTest):
181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("http://www.cnn.com")
184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Wait(5)
185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    while not self.IsDisplayed(".cnnOvrlyBtn.cnnBtnLogIn"):
186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self.ClickIfClickable("#hdr-auth .no-border.no-pad-right a")
187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self.Wait(1)
188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Click(".cnnOvrlyBtn.cnnBtnLogIn")
190cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#cnnOverlayEmail1l")
191cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("#cnnOverlayPwd")
192cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Click(".cnnOvrlyBtn.cnnBtnLogIn")
193cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Click(".cnnOvrlyBtn.cnnBtnLogIn")
194cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Wait(5)
195cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
196cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
197cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# http://crbug.com/368690
198cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Ebay(WebsiteTest):
199cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
200cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
201cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://signin.ebay.com/")
202cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("[name='userid']")
203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("[name='pass']")
204cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("[name='pass']")
205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Iframe, password saved but not autofileld.
208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Espn(WebsiteTest):
209cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
210cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
211cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("http://espn.go.com/")
212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    while not self.IsDisplayed("#cboxLoadedContent iframe"):
213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self.Click("#signin .cbOverlay")
214cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self.Wait(1)
215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    frame = self.driver.find_element_by_css_selector("#cboxLoadedContent "
216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                                     "iframe")
217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.driver.switch_to_frame(frame)
218cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#username")
219cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("#password")
220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    while self.IsDisplayed("#password"):
221cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self.ClickIfClickable("#submitBtn")
222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self.Wait(1)
223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
224cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
225cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# http://crbug.com/367768
226cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Live(WebsiteTest):
227cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
22903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    self.GoTo("https://login.live.com")
230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("[name='login']")
231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("[name='passwd']")
232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Submit("[name='passwd']")
233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# http://crbug.com/368690
236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class One63(WebsiteTest):
237cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("http://www.163.com")
240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.HoverOver("#js_N_navHighlight")
241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("#js_loginframe_username")
242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto(".ntes-loginframe-label-ipt[type='password']")
243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Click(".ntes-loginframe-btn")
244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# http://crbug.com/368690
247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Vube(WebsiteTest):
248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def Login(self):
250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.GoTo("https://vube.com")
251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.Click("[vube-login='']")
252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillUsernameInto("[ng-model='login.user']")
253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self.FillPasswordInto("[ng-model='login.pass']")
254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    while (self.IsDisplayed("[ng-model='login.pass']")
255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)           and not self.IsDisplayed(".prompt.alert")):
256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self.ClickIfClickable("[ng-click='login()']")
257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self.Wait(1)
258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
260cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)def Tests(environment):
261cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
262cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
263cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # Working tests.
264cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Facebook("facebook"))
267cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
268cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Google("google"))
269cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
270cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Linkedin("linkedin"))
271cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
272cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Mailru("mailru"))
273cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Nytimes("nytimes"))
275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
276cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Pinterest("pinterest"))
277cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
278cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Reddit("reddit", username_not_auto=True))
279cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
280cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Tumblr("tumblr", username_not_auto=True))
281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
28203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  environment.AddWebsiteTest(Twitter("twitter"))
28303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Wikipedia("wikipedia", username_not_auto=True))
285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
28603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  environment.AddWebsiteTest(Yahoo("yahoo", username_not_auto=True))
287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
28803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  environment.AddWebsiteTest(Yandex("yandex"))
289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # Disabled tests.
291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # Bug not reproducible without test.
294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Amazon("amazon"), disabled=True)
295cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
296cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # Password not saved.
297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Ask("ask"), disabled=True)
298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # Password not saved.
300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Baidu("baidu"), disabled=True)
301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # http://crbug.com/368690
303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Cnn("cnn"), disabled=True)
304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # http://crbug.com/368690
306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Ebay("ebay"), disabled=True)
307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # Iframe, password saved but not autofileld.
309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Espn("espn"), disabled=True)
310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # http://crbug.com/367768
312cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Live("live", username_not_auto=True),
313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                             disabled=True)
314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
315cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # http://crbug.com/368690
316cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(One63("163"), disabled=True)
317cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
318cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # http://crbug.com/368690
319cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment.AddWebsiteTest(Vube("vube"), disabled=True)
320cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
321116680a4aac90f2aa7413d9095a592090648e557Ben Murdochdef saveResults(environment_tests_results, environment_save_path):
322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  """Save the test results in an xml file.
323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  Args:
325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    environment_tests_results: A list of the TestResults that are going to be
326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        saved.
327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    environment_save_path: The file where the results are going to be saved.
328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        If it's None, the results are not going to be stored.
329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  Raises:
330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    Exception: An exception is raised if the file is not found.
331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  """
332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if environment_save_path:
333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    xml = "<result>"
334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    for test_result in environment_tests_results:
335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      xml += ("<test name='%s' successful='%s' type='%s'>%s</test>"
336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          % (test_result.name, str(test_result.successful),
337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          test_result.test_type, test_result.message))
338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    xml += "</result>"
339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    with open(environment_save_path, "w") as save_file:
340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      save_file.write(xml)
341cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
342cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)def RunTests(chrome_path, chromedriver_path, profile_path,
343cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)             environment_passwords_path, enable_automatic_password_saving,
344cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)             environment_numeric_level, log_to_console, environment_log_file,
345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch             environment_tested_websites, tests=None):
346cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
347cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  """Runs the the tests
348cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
349cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Args:
350cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    chrome_path: The chrome binary file.
351cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    chromedriver_path: The chromedriver binary file.
352cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    profile_path: The chrome testing profile folder.
353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    environment_passwords_path: The usernames and passwords file.
354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    enable_automatic_password_saving: If True, the passwords are going to be
355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        saved without showing the prompt.
356cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    environment_numeric_level: The log verbosity.
357cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    log_to_console: If True, the debug logs will be shown on the console.
358cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    environment_log_file: The file where to store the log. If it's empty, the
359cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        log is not stored.
360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    environment_tested_websites: One of the TypeOfTestedWebsites values,
361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        indicating which group of tests to run.
362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    tests: Specifies which tests to run. Ignored unless
363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch       |environment_tested_websites| is equal to LIST_OF_TESTS.
364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  Returns:
366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    The results of tests as list of TestResults.
367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Raises:
368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    Exception: An exception is raised if one of the tests fails.
369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  """
370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  environment = Environment(chrome_path, chromedriver_path, profile_path,
372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                            environment_passwords_path,
373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                            enable_automatic_password_saving,
374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                            environment_numeric_level,
375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                            log_to_console,
376cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                            environment_log_file)
377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
378cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # Test which care about the save-password prompt need the prompt
379cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # to be shown. Automatic password saving results in no prompt.
380cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  run_prompt_tests = not enable_automatic_password_saving
381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
382cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Tests(environment)
383cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if environment_tested_websites == TypeOfTestedWebsites.ALL_TESTS:
385cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    environment.AllTests(run_prompt_tests)
386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  elif environment_tested_websites == TypeOfTestedWebsites.DISABLED_TESTS:
387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    environment.DisabledTests(run_prompt_tests)
388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  elif environment_tested_websites == TypeOfTestedWebsites.LIST_OF_TESTS:
389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    environment.Test(tests, run_prompt_tests)
390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  elif environment_tested_websites == TypeOfTestedWebsites.ENABLED_TESTS:
391cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    environment.WorkingTests(run_prompt_tests)
392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  else:
393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    raise Exception("Error: |environment_tested_websites| has to be one of the"
394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        "TypeOfTestedWebsites values")
395cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
396cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  environment.Quit()
398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return environment.tests_results
399cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
400cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Tests setup.
401cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)if __name__ == "__main__":
402cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  parser = argparse.ArgumentParser(
403cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      description="Password Manager automated tests help.")
404cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
405cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  parser.add_argument(
406cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      "--chrome-path", action="store", dest="chrome_path",
407cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      help="Set the chrome path (required).", nargs=1, required=True)
408cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  parser.add_argument(
409cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      "--chromedriver-path", action="store", dest="chromedriver_path",
410cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      help="Set the chromedriver path (required).", nargs=1, required=True)
411cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  parser.add_argument(
412cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      "--profile-path", action="store", dest="profile_path",
413cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      help="Set the profile path (required). You just need to choose a "
414cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)           "temporary empty folder. If the folder is not empty all its content "
415cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)           "is going to be removed.",
416cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      nargs=1, required=True)
417cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
418cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  parser.add_argument(
419cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      "--passwords-path", action="store", dest="passwords_path",
420cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      help="Set the usernames/passwords path (required).", nargs=1,
421cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      required=True)
422cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  parser.add_argument("--all", action="store_true", dest="all",
423cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      help="Run all tests.")
424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  parser.add_argument("--disabled", action="store_true", dest="disabled",
425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                      help="Run only disabled tests.")
426cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  parser.add_argument("--log", action="store", nargs=1, dest="log_level",
427cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      help="Set log level.")
428cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  parser.add_argument("--log-screen", action="store_true", dest="log_screen",
429cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      help="Show log on the screen.")
430cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  parser.add_argument("--log-file", action="store", dest="log_file",
431cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      help="Write the log in a file.", nargs=1)
432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  parser.add_argument("--save-path", action="store", nargs=1, dest="save_path",
433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                      help="Write the results in a file.")
434cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  parser.add_argument("tests", help="Tests to be run.",  nargs="*")
435cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
436cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  args = parser.parse_args()
437cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
438cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  passwords_path = args.passwords_path[0]
439cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if args.all:
441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    tested_websites = TypeOfTestedWebsites.ALL_TESTS
442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  elif args.disabled:
443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    tested_websites = TypeOfTestedWebsites.DISABLED_TESTS
444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  elif args.tests:
445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    tested_websites = TypeOfTestedWebsites.LIST_OF_TESTS
446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  else:
447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    tested_websites = TypeOfTestedWebsites.ENABLED_TESTS
448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
449cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  numeric_level = None
450cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if args.log_level:
451cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    numeric_level = getattr(logging, args.log_level[0].upper(), None)
452cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if not isinstance(numeric_level, int):
453cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      raise ValueError("Invalid log level: %s" % args.log_level[0])
454cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
455cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  log_file = None
456cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if args.log_file:
457cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    log_file = args.log_file[0]
458cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  save_path = None
460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if args.save_path:
461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    save_path = args.save_path[0]
462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
463cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # Run the test without enable-automatic-password-saving to check whether or
464cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # not the prompt is shown in the way we expected.
465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  tests_results = RunTests(args.chrome_path[0],
466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           args.chromedriver_path[0],
467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           args.profile_path[0],
468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           passwords_path,
469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           False,
470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           numeric_level,
471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           args.log_screen,
472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           log_file,
473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           tested_websites,
474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                           args.tests)
475cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
476cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # Run the test with enable-automatic-password-saving to check whether or not
477cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  # the passwords is stored in the the way we expected.
478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  tests_results += RunTests(args.chrome_path[0],
479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            args.chromedriver_path[0],
480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            args.profile_path[0],
481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            passwords_path,
482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            True,
483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            numeric_level,
484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            args.log_screen,
485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            log_file,
486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            tested_websites,
487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            args.tests)
488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  saveResults(tests_results, save_path)
490