1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#!/usr/bin/python
# Copyright (c) 2010 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
import random
import pyauto_functional
from pyauto import PyUITest
from pyauto import GURL
import autotour
class OmniboxModelTest(autotour.Godel, PyUITest):
"""Omnibox Model which Opens tabs, navigates to specific URL's and keeps track
of URL's visited which are then verified agains the Omnibox's info.
"""
def __init__(self, methodName='runTest', **kwargs):
PyUITest.__init__(self, methodName=methodName, **kwargs)
self._tab_count = 1
self._url_map = {}
self.InitUrls()
def InitUrls(self):
"""Setup Url Map which stores the name of the url and a list of url and
visited count.
"""
self._url_map = {
'google': ('http://www.google.com', 0),
'yahoo': ('http://www.yahoo.com', 0),
'msn': ('http://www.msn.com', 0),
'facebook': ('http://www.facebook.com', 0),
'twitter': ('http://www.twitter.com', 0),
}
def CanOpenTab(self):
return self._tab_count < 5
def CanCloseTab(self):
return self._tab_count > 1
def CanNavigate(self):
# FIX: CanNavigate can be called if there is atleast one tab to be closed.
# Currently this condition is incorrect because CanCloseTab leaves atleast
# one tab because without that, there is some crash which is under
# investigation.
if self.CanCloseTab():
return False
for key in self._url_map:
if self._url_map[key][1] == 0:
return True
return False
def _GetOmniboxMatchesFor(self, text, windex=0, attr_dict=None):
"""Fetch omnibox matches with the given attributes for the given query.
Args:
text: the query text to use
windex: the window index to work on. Defaults to 0 (first window)
attr_dict: the dictionary of properties to be satisfied
Returns:
a list of match items
"""
self.SetOmniboxText(text, windex=windex)
self.WaitUntilOmniboxQueryDone(windex=windex)
if not attr_dict:
matches = self.GetOmniboxInfo(windex=windex).Matches()
else:
matches = self.GetOmniboxInfo(windex=windex).MatchesWithAttributes(
attr_dict=attr_dict)
return matches
@autotour.GodelAction(1, CanOpenTab)
def OpenTab(self):
"""Opens a tab in the first window and navigates to a random site from
url map.
"""
logging.info('#In Open Tab')
self._tab_count = self._tab_count + 1
key = random.choice(self._url_map.keys())
logging.info('#Navigating to ' + self._url_map[key][0])
self.AppendTab(GURL(self._url_map[key][0]))
self._url_map[key][1] = self._url_map[key][1] + 1
self.VerifyOmniboxInfo()
@autotour.GodelAction(10, CanCloseTab)
def CloseTab(self):
"""Closes the first tab from the first window"""
self._tab_count = self._tab_count - 1
self.GetBrowserWindow(0).GetTab(0).Close(True)
def VerifyOmniboxInfo(self):
for key in self._url_map.keys():
"""Verify inline autocomplete for a pre-visited url."""
search_for = key[:3]
matches = self._GetOmniboxMatchesFor(search_for, windex=0)
self.assertTrue(matches)
# Omnibox should suggest auto completed url as the first item
matches_description = matches[0]
term_to_find = search_for
if self._url_map[key][1] > 0:
logging.info('#verifying : ' + key)
logging.info('#verifying ' + key + ' text ' + search_for)
term_to_find = self._url_map[key][0][7:]
self.assertEqual('history-url', matches_description['type'])
self.assertTrue(self._url_map[key][0][11:] in
self.GetOmniboxInfo().Text())
self.assertTrue(term_to_find in matches_description['contents'])
@autotour.GodelAction(10, CanNavigate)
def Navigate(self):
"""Navigates to a URL by picking a random url from list"""
logging.info('#In Navigate')
index = random.randint(0, len(self._url_map.keys()) - 1)
key = self._url_map.keys()[index]
logging.info('#navigating to ' + self._url_map[key][0])
self.NavigateToURL(self._url_map[key][0])
self._url_map[key][1] = self._url_map[key][1] + 1
self.VerifyOmniboxInfo()
def testExplore(self):
e = autotour.Explorer()
logging.info('#Explorer created')
e.Add(self)
logging.info('#Object added')
e.Explore(self.CanNavigate)
logging.info('#Done')
if __name__ == '__main__':
pyauto_functional.Main()
|