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

Side by Side Diff: components/test/data/password_manager/action.py

Issue 273523004: Password Manager testing automation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cmd 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 unified diff | Download patch
OLDNEW
(Empty)
1 import time
vabr (Chromium) 2014/05/08 13:53:45 Please add a module docstring (also in other Pytho
vabr (Chromium) 2014/05/08 13:53:45 Also please add the encoding, like you did in test
rchtara 2014/05/14 11:58:04 Done.
2 from selenium.webdriver.common.action_chains import ActionChains
3 from selenium.webdriver.common.keys import Keys
4 from selenium.common.exceptions import ElementNotVisibleException
5
6
7 class Action:
8
vabr (Chromium) 2014/05/08 13:53:45 Please add a docstring documenting this class. Als
9 def __init__(self, action_type, param, website):
10 self.action_type = action_type
11 self.param = param
12 self.website = website
13
14 def Do(self, driver):
15 """Do the default behavior of the action.
16 """
vabr (Chromium) 2014/05/08 13:53:45 'For one liner docstrings, please keep the closing
rchtara 2014/05/14 11:58:04 Done.
17 print "actiontype: %s actionparam: %s" % (self.action_type, self.param)
vabr (Chromium) 2014/05/08 13:53:45 If you need this temporarily as a debugging messag
rchtara 2014/05/14 11:58:04 I think it's important to put the log, because the
18 if self.action_type == "goto":
19 driver.get(self.param)
20 elif self.action_type == "wait":
21 time.sleep(self.param)
22 elif self.action_type == "click":
23 element = driver.find_element_by_css_selector(self.param)
24 element.click()
25 elif self.action_type == "hover":
26 element = driver.find_element_by_css_selector(self.param)
27 hover = ActionChains(driver).move_to_element(element)
28 hover.perform()
29 elif self.action_type == "submit":
30 element = driver.find_element_by_css_selector(self.param)
31 element.submit()
32 elif self.action_type == "enter":
33 body = driver.find_element_by_tag_name("body")
34 body.send_keys(Keys.ENTER)
35 elif self.action_type == "optinalfillusername":
vabr (Chromium) 2014/05/08 13:53:45 typo: optinal -> optional
rchtara 2014/05/14 11:58:04 Done.
36 username_element = driver.find_element_by_css_selector(self.param)
37 print username_element
38 try:
39 username_element.clear()
40 username_element.send_keys(self.website.username)
41 except ElementNotVisibleException:
42 pass
43 elif self.action_type == "fillusername":
44 username_element = driver.find_element_by_css_selector(self.param)
45 username_element.clear()
46 username_element.send_keys(self.website.username)
47 elif self.action_type == "fillpassword":
48 """Chrome protects the password inputs and doesn't fill them until
vabr (Chromium) 2014/05/08 13:53:45 As already mentioned off-line: except for doc-stri
rchtara 2014/05/14 11:58:04 Done.
49 the user interacts with them. So when using chromedriver, we need
50 to be careful about that: we need to send a key to password
51 element, chrome is going to autofill it if he has already saved
52 password for it, then we need to clear everything and send the
53 password.
54 """
55 password_element = driver.find_element_by_css_selector(self.param)
56 password_element.send_keys("a")
vabr (Chromium) 2014/05/08 13:53:45 Why do we actually care if Chrome fills the passwo
rchtara 2014/05/14 11:58:04 Chrome doesn't fill password input until the user
57 password_element.clear()
58 password_element.send_keys(self.website.password)
59 elif self.action_type == "wait":
60 time.sleep(self.param)
vabr (Chromium) 2014/05/08 13:53:45 You already have one if-branch for "wait". Please
rchtara 2014/05/14 11:58:04 Done.
61
62 def DoAutofilled(self, driver):
63 """Make the action behavior when the username and password fields are
vabr (Chromium) 2014/05/08 13:53:45 nit: Please use single-space consistently, no doub
vabr (Chromium) 2014/05/08 13:53:45 I cannot parse the sentence. Are you trying to say
rchtara 2014/05/14 11:58:04 Done.
rchtara 2014/05/14 11:58:04 Done.
64 expected to be autofilled: for fillusername amd fillpassword, check that
65 the autofilled values are equal to the ones we expect. For other actions,
66 do the default behavior.
67
vabr (Chromium) 2014/05/08 13:53:45 nit: Please remove the blank line.
rchtara 2014/05/14 11:58:04 Done.
68 """
69 if (self.action_type == "fillusername" and
70 not self.website.username_not_auto):
71 print "actiontype: %s actionparam: %s" % (self.action_type, self.param)
72 username_element = driver.find_element_by_css_selector(self.param)
73 assert username_element.get_attribute("value") == self.website.username, (
vabr (Chromium) 2014/05/08 13:53:45 The Chromium style guide for Python (http://dev.ch
rchtara 2014/05/14 11:58:04 Done.
74 "Error: autofilled "
75 "username is different form the one we just saved for the "
76 "following website : %s \n" % self.website.Url())
77 elif self.action_type == "fillpassword":
78 print "actiontype: %s actionparam: %s" % (self.action_type, self.param)
79 """Chrome protects the password inputs and doesn't fill them until
vabr (Chromium) 2014/05/08 13:53:45 Actually, some errors I saw in the past were when
rchtara 2014/05/14 11:58:04 I made the test and you right: the password is aut
80 the user interacts with them. So when using chromedriver, if we
81 want to get the stored password, we need to be careful about that:
82 we need to send a key to password element, chrome is going to
83 autofill it if he has already saved password for it, then we need
84 to get the value of the input and we remove the character we add
85 it before.
86 """
87 password_element = driver.find_element_by_css_selector(self.param)
88 password_element.send_keys("a")
89 ps = password_element.get_attribute("value")[:-1]
90 password_element.clear()
91 password_element.send_keys(ps)
92 assert password_element.get_attribute("value") == self.website.password, (
93 "Error: autofilled password is different from the one we just saved "
94 "for the following website : %s p1: %s p2:%s \n" %
95 (self.website.Url(), password_element.get_attribute("value"),
96 self.website.password))
97 else:
98 self.Do(driver)
99
100 def DoNotAutofilled(self, driver):
101 """Do the action behavior when the password field is not expected to be
vabr (Chromium) 2014/05/08 13:53:45 Please once you improve the docstring for the prev
rchtara 2014/05/14 11:58:04 Done.
rchtara 2014/05/14 11:58:04 Done.
102 autofilled: for fillpassword check that the password field is empty before
103 filling it. For other actions, do the default behavior.
104 """
105 if self.action_type == "fillpassword":
106 """Chrome protects the password inputs and doesn't fill them until
107 the user interacts with them. So when using chromedriver, if we
108 want to get the stored password, we need to be careful about that:
109 we need to send a key to password element, chrome is going to
110 autofill it if he has already saved password for it, then we need
111 to get the value of the input and we remove the character we add
112 it before.
113 """
114 password_element = driver.find_element_by_css_selector(self.param)
115 password_element.send_keys("a")
116 ps = password_element.get_attribute("value")[1:]
117 password_element.clear()
118 password_element.send_keys(ps)
119
120 assert len(ps) == 0, ("Error: password is autofilled when it shouldn't "
vabr (Chromium) 2014/05/08 13:53:45 len(ps) == 0 should be just ps (Look for "len(" in
rchtara 2014/05/14 11:58:04 Done.
121 " be for the following website : %s \n"
122 % self.website.Url())
123
124 self.Do(driver)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698