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

Side by Side Diff: chrome/test/functional/autofill.py

Issue 6792035: Add an Autofill test to verify that Autofill does not fill in read-only fields. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « chrome/test/data/autofill/read_only_field_test.html ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import logging 6 import logging
7 import os 7 import os
8 import pickle 8 import pickle
9 9
10 import autofill_dataset_converter 10 import autofill_dataset_converter
11 import autofill_dataset_generator 11 import autofill_dataset_generator
12 import pyauto_functional # Must be imported before pyauto 12 import pyauto_functional # Must be imported before pyauto
13 import pyauto 13 import pyauto
14 14
15 TAB_KEYPRESS = 0x09 # Tab keyboard key press.
16 DOWN_KEYPRESS = 0x28 # Down arrow keyboard key press.
17 RETURN_KEYPRESS = 0x0D # Return keyboard key press.
18 15
19 class AutofillTest(pyauto.PyUITest): 16 class AutofillTest(pyauto.PyUITest):
20 """Tests that autofill works correctly""" 17 """Tests that autofill works correctly"""
21 18
22 def Debug(self): 19 def Debug(self):
23 """Test method for experimentation. 20 """Test method for experimentation.
24 21
25 This method will not run automatically. 22 This method will not run automatically.
26 """ 23 """
27 import pprint 24 import pprint
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 js_code = """ 141 js_code = """
145 document.getElementById("merge_dup").submit(); 142 document.getElementById("merge_dup").submit();
146 window.addEventListener("unload", function() { 143 window.addEventListener("unload", function() {
147 window.domAutomationController.send("done"); 144 window.domAutomationController.send("done");
148 }); 145 });
149 """ 146 """
150 self.ExecuteJavascript(js_code, 0, 0) 147 self.ExecuteJavascript(js_code, 0, 0)
151 if 'EMAIL_ADDRESS' in self.GetAutofillProfile()['profiles'][0]: 148 if 'EMAIL_ADDRESS' in self.GetAutofillProfile()['profiles'][0]:
152 raise KeyError('TEST FAIL: Malformed email address is saved in profiles.') 149 raise KeyError('TEST FAIL: Malformed email address is saved in profiles.')
153 150
151 def _SendKeyEventsToPopulateForm(self, tab_index=0, windex=0):
152 """Send key events to populate a web form with Autofill profile data.
153
154 Args:
155 tab_index: The tab index, default is 0.
156 windex: The window index, default is 0.
157 """
158 TAB_KEYPRESS = 0x09 # Tab keyboard key press.
159 DOWN_KEYPRESS = 0x28 # Down arrow keyboard key press.
160 RETURN_KEYPRESS = 0x0D # Return keyboard key press.
161
162 self.SendWebkitKeyEvent(TAB_KEYPRESS, tab_index, windex)
163 self.SendWebkitKeyEvent(DOWN_KEYPRESS, tab_index, windex)
164 self.SendWebkitKeyEvent(DOWN_KEYPRESS, tab_index, windex)
165 self.SendWebkitKeyEvent(RETURN_KEYPRESS, tab_index, windex)
166
154 def testComparePhoneNumbers(self): 167 def testComparePhoneNumbers(self):
155 """Test phone fields parse correctly from a given profile. 168 """Test phone fields parse correctly from a given profile.
156 169
157 The high level key presses execute the following: Select the first text 170 The high level key presses execute the following: Select the first text
158 field, invoke the autofill popup list, select the first profile within the 171 field, invoke the autofill popup list, select the first profile within the
159 list, and commit to the profile to populate the form. 172 list, and commit to the profile to populate the form.
160 """ 173 """
161 profile_path = os.path.join(self.DataDir(), 'autofill', 174 profile_path = os.path.join(self.DataDir(), 'autofill',
162 'phone_pinput_autofill.txt') 175 'phone_pinput_autofill.txt')
163 profile_expected_path = os.path.join(self.DataDir(), 'autofill', 176 profile_expected_path = os.path.join(self.DataDir(), 'autofill',
164 'phone_pexpected_autofill.txt') 177 'phone_pexpected_autofill.txt')
165 profiles = self.EvalDataFrom(profile_path) 178 profiles = self.EvalDataFrom(profile_path)
166 profiles_expected = self.EvalDataFrom(profile_expected_path) 179 profiles_expected = self.EvalDataFrom(profile_expected_path)
167 self.FillAutofillProfile(profiles=profiles) 180 self.FillAutofillProfile(profiles=profiles)
168 url = self.GetHttpURLForDataPath( 181 url = self.GetHttpURLForDataPath(
169 os.path.join('autofill', 'form_phones.html')) 182 os.path.join('autofill', 'form_phones.html'))
170 for profile_expected in profiles_expected: 183 for profile_expected in profiles_expected:
171 self.NavigateToURL(url) 184 self.NavigateToURL(url)
172 # Tab keyboard key press. 185 self._SendKeyEventsToPopulateForm()
173 self.SendWebkitKeyEvent(TAB_KEYPRESS, tab_index=0, windex=0)
174 # Down arrow keyboard key press.
175 self.SendWebkitKeyEvent(DOWN_KEYPRESS, tab_index=0, windex=0)
176 # Down arrow keyboard key press.
177 self.SendWebkitKeyEvent(DOWN_KEYPRESS, tab_index=0, windex=0)
178 # Return keyboard key press.
179 self.SendWebkitKeyEvent(RETURN_KEYPRESS, tab_index=0, windex=0)
180 form_values = {} 186 form_values = {}
181 for key, value in profile_expected.iteritems(): 187 for key, value in profile_expected.iteritems():
182 js_returning_field_value = ( 188 js_returning_field_value = (
183 'var field_value = document.getElementById("%s").value;' 189 'var field_value = document.getElementById("%s").value;'
184 'window.domAutomationController.send(field_value);' 190 'window.domAutomationController.send(field_value);'
185 ) % key 191 ) % key
186 form_values[key] = self.ExecuteJavascript( 192 form_values[key] = self.ExecuteJavascript(
187 js_returning_field_value, 0, 0) 193 js_returning_field_value, 0, 0)
188 self.assertEqual( 194 self.assertEqual(
189 form_values[key], value, 195 form_values[key], value,
(...skipping 26 matching lines...) Expand all
216 """ 222 """
217 self.ExecuteJavascript(js_code, 0, 0) 223 self.ExecuteJavascript(js_code, 0, 0)
218 # Wait until form is submitted and page completes loading. 224 # Wait until form is submitted and page completes loading.
219 self.WaitUntil( 225 self.WaitUntil(
220 lambda: self.GetDOMValue('document.readyState'), 226 lambda: self.GetDOMValue('document.readyState'),
221 expect_retval='complete') 227 expect_retval='complete')
222 cc_infobar = self.GetBrowserInfo()['windows'][0]['tabs'][0]['infobars'] 228 cc_infobar = self.GetBrowserInfo()['windows'][0]['tabs'][0]['infobars']
223 self.assertEqual(0, len(cc_infobar), 229 self.assertEqual(0, len(cc_infobar),
224 'Save credit card infobar offered to save CC info.') 230 'Save credit card infobar offered to save CC info.')
225 231
232 def testNoAutofillForReadOnlyFields(self):
233 """Test that Autofill does not fill in read-only fields."""
234 profile = {'NAME_FIRST': 'Bob',
235 'NAME_LAST': 'Smith',
236 'EMAIL_ADDRESS': 'bsmith@gmail.com',
237 'ADDRESS_HOME_LINE1': '1234 H St.',
238 'ADDRESS_HOME_CITY': 'San Jose',
239 'ADDRESS_HOME_STATE': 'CA',
240 'ADDRESS_HOME_ZIP': '95110',
241 'COMPANY_NAME': 'Company X',
242 'PHONE_HOME_WHOLE_NUMBER': '408-123-4567',}
243
244 self.FillAutofillProfile(profiles=[profile])
245 url = self.GetHttpURLForDataPath(
246 os.path.join('autofill', 'read_only_field_test.html'))
247 self.NavigateToURL(url)
248 self._SendKeyEventsToPopulateForm()
249 js_return_readonly_field = (
250 'var field_value = document.getElementById("email").value;'
251 'window.domAutomationController.send(field_value);')
252 readonly_field_value = self.ExecuteJavascript(
253 js_return_readonly_field, 0, 0)
254 js_return_addrline1_field = (
255 'var field_value = document.getElementById("address").value;'
256 'window.domAutomationController.send(field_value);')
257 addrline1_field_value = self.ExecuteJavascript(
258 js_return_addrline1_field, 0, 0)
259 self.assertNotEqual(
260 readonly_field_value, profile['EMAIL_ADDRESS'],
261 'Autofill filled in value for a read-only field.')
262 self.assertEqual(
263 addrline1_field_value, profile['ADDRESS_HOME_LINE1'],
264 'Unexpected value in the Address field.')
265
226 def FormFillLatencyAfterSubmit(self): 266 def FormFillLatencyAfterSubmit(self):
227 """Test latency time on form submit with lots of stored Autofill profiles. 267 """Test latency time on form submit with lots of stored Autofill profiles.
228 268
229 This test verifies when a profile is selected from the Autofill dictionary 269 This test verifies when a profile is selected from the Autofill dictionary
230 that consists of thousands of profiles, the form does not hang after being 270 that consists of thousands of profiles, the form does not hang after being
231 submitted. 271 submitted.
232 272
233 The high level key presses execute the following: Select the first text 273 The high level key presses execute the following: Select the first text
234 field, invoke the autofill popup list, select the first profile within the 274 field, invoke the autofill popup list, select the first profile within the
235 list, and commit to the profile to populate the form. 275 list, and commit to the profile to populate the form.
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 merged_profile = os.path.join(self.DataDir(), 'autofill', 367 merged_profile = os.path.join(self.DataDir(), 'autofill',
328 'merged-profiles.txt') 368 'merged-profiles.txt')
329 profile_dict = self.GetAutofillProfile()['profiles'] 369 profile_dict = self.GetAutofillProfile()['profiles']
330 output = open(merged_profile, 'wb') 370 output = open(merged_profile, 'wb')
331 pickle.dump(profile_dict, output) 371 pickle.dump(profile_dict, output)
332 output.close() 372 output.close()
333 373
334 374
335 if __name__ == '__main__': 375 if __name__ == '__main__':
336 pyauto_functional.Main() 376 pyauto_functional.Main()
OLDNEW
« no previous file with comments | « chrome/test/data/autofill/read_only_field_test.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698