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

Side by Side Diff: chrome/test/pyautolib/pyauto.py

Issue 5088001: Add pyauto hook for getting and manipulating the data underneath the NTP. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/test/functional
Patch Set: ... Created 10 years, 1 month 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
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 2
3 # Copyright (c) 2010 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """PyAuto: Python Interface to Chromium's Automation Proxy. 7 """PyAuto: Python Interface to Chromium's Automation Proxy.
8 8
9 PyAuto uses swig to expose Automation Proxy interfaces to Python. 9 PyAuto uses swig to expose Automation Proxy interfaces to Python.
10 For complete documentation on the functionality available, 10 For complete documentation on the functionality available,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 raise 79 raise
80 80
81 # Should go after sys.path is set appropriately 81 # Should go after sys.path is set appropriately
82 import bookmark_model 82 import bookmark_model
83 import download_info 83 import download_info
84 import history_info 84 import history_info
85 import omnibox_info 85 import omnibox_info
86 import plugins_info 86 import plugins_info
87 import prefs_info 87 import prefs_info
88 from pyauto_errors import JSONInterfaceError 88 from pyauto_errors import JSONInterfaceError
89 from pyauto_errors import NTPThumbnailNotShownError
89 import simplejson as json # found in third_party 90 import simplejson as json # found in third_party
90 91
91 92
92 class PyUITest(pyautolib.PyUITestBase, unittest.TestCase): 93 class PyUITest(pyautolib.PyUITestBase, unittest.TestCase):
93 """Base class for UI Test Cases in Python. 94 """Base class for UI Test Cases in Python.
94 95
95 A browser is created before executing each test, and is destroyed after 96 A browser is created before executing each test, and is destroyed after
96 each test irrespective of whether the test passed or failed. 97 each test irrespective of whether the test passed or failed.
97 98
98 You should derive from this class and create methods with 'test' prefix, 99 You should derive from this class and create methods with 'test' prefix,
(...skipping 1670 matching lines...) Expand 10 before | Expand all | Expand 10 after
1769 1770
1770 Raises: 1771 Raises:
1771 pyauto_errors.JSONInterfaceError if the automation call returns an error. 1772 pyauto_errors.JSONInterfaceError if the automation call returns an error.
1772 """ 1773 """
1773 cmd_dict = { 1774 cmd_dict = {
1774 'command': 'DisableSyncForDatatypes', 1775 'command': 'DisableSyncForDatatypes',
1775 'datatypes': datatypes, 1776 'datatypes': datatypes,
1776 } 1777 }
1777 return self._GetResultFromJSONRequest(cmd_dict)['success'] 1778 return self._GetResultFromJSONRequest(cmd_dict)['success']
1778 1779
1780 def GetNTPThumbnails(self):
1781 """Return a list of info about the sites in the NTP most visited section.
1782 SAMPLE:
1783 [{ u'title': u'Google',
1784 u'url': u'http://www.google.com',
1785 u'is_pinned': False},
1786 {
1787 u'title': u'Yahoo',
1788 u'url': u'http://www.yahoo.com',
1789 u'is_pinned': True}]
1790 """
1791 return self._GetNTPInfo()['most_visited']
1792
1793 def GetNTPThumbnailIndex(self, thumbnail):
1794 """Returns the index of the given NTP thumbnail, or -1 if it is not shown.
1795
1796 Args:
1797 thumbnail: a thumbnail dict received from |GetNTPThumbnails|
1798 """
1799 thumbnails = self.GetNTPThumbnails()
1800 for i in range(len(thumbnails)):
1801 if thumbnails[i]['url'] == thumbnail['url']:
1802 return i
1803 return -1
1804
1805 def MoveNTPThumbnail(self, thumbnail, new_index):
1806 """Moves the given thumbnail to a new index. The indices in the NTP Most
1807 Visited sites section look like:
1808 0 1 2 3
1809 4 5 6 7
1810
1811 When a thumbnail is moved, it is automatically pinned.
1812
1813 Args:
1814 thumbnail: a thumbnail dict received from |GetNTPThumbnails|
1815 new_index: the index to be moved to in the Most Visited sites section
1816
1817 Raises:
1818 IndexError if there is no thumbnail at the index
1819 """
1820 if new_index < 0 or new_index >= len(self.GetNTPThumbnails()):
1821 raise IndexError()
1822 self._CheckNTPThumbnailShown(thumbnail)
1823 cmd_dict = {
1824 'command': 'MoveNTPMostVisitedThumbnail',
1825 'url': thumbnail['url'],
1826 'index': new_index,
1827 'old_index': self.GetNTPThumbnailIndex(thumbnail)
1828 }
1829 self._GetResultFromJSONRequest(cmd_dict)
1830
1831 def RemoveNTPThumbnail(self, thumbnail):
1832 """Removes the NTP thumbnail and returns true on success.
1833
1834 Args:
1835 thumbnail: a thumbnail dict received from |GetNTPThumbnails|
1836 """
1837 self._CheckNTPThumbnailShown(thumbnail)
1838 cmd_dict = {
1839 'command': 'RemoveNTPMostVisitedThumbnail',
1840 'url': thumbnail['url']
1841 }
1842 self._GetResultFromJSONRequest(cmd_dict)
1843
1844 def PinNTPThumbnail(self, thumbnail):
1845 """Pins the NTP thumbnail.
1846
1847 Args:
1848 thumbnail: a thumbnail dict received from |GetNTPThumbnails|
1849 """
1850 self._CheckNTPThumbnailShown(thumbnail)
1851 self.MoveNTPThumbnail(thumbnail, self.GetNTPThumbnailIndex(thumbnail))
1852
1853 def UnpinNTPThumbnail(self, thumbnail):
1854 """Unpins the NTP thumbnail and returns true on success.
1855
1856 Args:
1857 thumbnail: a thumbnail dict received from |GetNTPThumbnails|
1858 """
1859 self._CheckNTPThumbnailShown(thumbnail)
1860 cmd_dict = {
1861 'command': 'UnpinNTPMostVisitedThumbnail',
1862 'url': thumbnail['url']
1863 }
1864 self._GetResultFromJSONRequest(cmd_dict)
1865
1866 def IsNTPThumbnailPinned(self, thumbnail):
1867 """Returns whether the NTP thumbnail is pinned.
1868
1869 Args:
1870 thumbnail: a thumbnail dict received from |GetNTPThumbnails|
1871 """
1872 self._CheckNTPThumbnailShown(thumbnail)
1873 index = self.GetNTPThumbnailIndex(thumbnail)
1874 return self.GetNTPThumbnails()[index]['is_pinned']
1875
1876 def RestoreAllNTPThumbnails(self):
1877 """Restores all the removed NTP thumbnails.
1878 Note:
1879 the default thumbnails may come back into the Most Visited sites
1880 section after doing this
1881 """
1882 cmd_dict = {
1883 'command': 'RestoreAllNTPMostVisitedThumbnails'
1884 }
1885 self._GetResultFromJSONRequest(cmd_dict)
1886
1887 def GetNTPDefaultSites(self):
1888 """Returns a list of URLs for all the default NTP sites, regardless of
1889 whether they are showing or not.
1890
1891 These sites are the ones present in the NTP on a fresh install of Chrome.
1892 """
1893 return self._GetNTPInfo()['default_sites']
1894
1895 def RemoveNTPDefaultThumbnails(self):
1896 """Removes all thumbnails for default NTP sites, regardless of whether they
1897 are showing or not."""
1898 cmd_dict = { 'command': 'RemoveNTPMostVisitedThumbnail' }
1899 for site in self.GetNTPDefaultSites():
1900 cmd_dict['url'] = site
1901 self._GetResultFromJSONRequest(cmd_dict)
1902
1903 def GetNTPRecentlyClosed(self):
1904 """Return a list of info about the items in the NTP recently closed section.
1905 SAMPLE:
1906 [{
1907 u'type': u'tab',
1908 u'url': u'http://www.bing.com',
1909 u'title': u'Bing',
1910 u'timestamp': 2139082.03912, # Seconds since epoch (Jan 1, 1970)
1911 u'direction': u'ltr'},
1912 {
1913 u'type': u'window',
1914 u'timestamp': 2130821.90812,
1915 u'tabs': [
1916 {
1917 u'type': u'tab',
1918 u'url': u'http://www.cnn.com',
1919 u'title': u'CNN',
1920 u'timestamp': 2129082.12098,
1921 u'direction': u'ltr'}]},
1922 {
1923 u'type': u'tab',
1924 u'url': u'http://www.altavista.com',
1925 u'title': u'Altavista',
1926 u'timestamp': 21390820.12903,
1927 u'direction': u'rtl'}]
1928 """
1929 return self._GetNTPInfo()['recently_closed']
1930
1931 def _GetNTPInfo(self):
1932 """Get info about the NTP. This does not retrieve the actual info shown
1933 in a particular NTP, but the current data that would be used to display
1934 a NTP.
1935
1936 This includes info about the most visited sites, the recently closed
1937 tabs and windows, and the default NTP sites.
1938
1939 TODO(kkania): Add info about apps.
1940
1941 Returns:
1942 a dictionary containing info about NTP info. See details about the
1943 sections in their respective methods.
1944
1945 SAMPLE:
1946 { u'most_visited': [ ... ],
1947 u'recently_closed': [ ... ]
1948 u'default_sites': [ ... ]
1949 }
1950
1951 Raises:
1952 pyauto_errors.JSONInterfaceError if the automation call returns an error.
1953 """
1954 cmd_dict = {
1955 'command': 'GetNTPInfo',
1956 }
1957 return self._GetResultFromJSONRequest(cmd_dict)
1958
1959 def _CheckNTPThumbnailShown(self, thumbnail):
1960 if self.GetNTPThumbnailIndex(thumbnail) == -1:
1961 raise NTPThumbnailNotShownError()
1962
1963
1779 class PyUITestSuite(pyautolib.PyUITestSuiteBase, unittest.TestSuite): 1964 class PyUITestSuite(pyautolib.PyUITestSuiteBase, unittest.TestSuite):
1780 """Base TestSuite for PyAuto UI tests.""" 1965 """Base TestSuite for PyAuto UI tests."""
1781 1966
1782 def __init__(self, args): 1967 def __init__(self, args):
1783 pyautolib.PyUITestSuiteBase.__init__(self, args) 1968 pyautolib.PyUITestSuiteBase.__init__(self, args)
1784 1969
1785 # Figure out path to chromium binaries 1970 # Figure out path to chromium binaries
1786 browser_dir = os.path.normpath(os.path.dirname(pyautolib.__file__)) 1971 browser_dir = os.path.normpath(os.path.dirname(pyautolib.__file__))
1787 logging.debug('Loading pyauto libs from %s', browser_dir) 1972 logging.debug('Loading pyauto libs from %s', browser_dir)
1788 self.Initialize(pyautolib.FilePath(browser_dir)) 1973 self.Initialize(pyautolib.FilePath(browser_dir))
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
2077 if self._options.verbose: 2262 if self._options.verbose:
2078 verbosity = 2 2263 verbosity = 2
2079 result = PyAutoTextTestRuner(verbosity=verbosity).run(pyauto_suite) 2264 result = PyAutoTextTestRuner(verbosity=verbosity).run(pyauto_suite)
2080 del loaded_tests # Need to destroy test cases before the suite 2265 del loaded_tests # Need to destroy test cases before the suite
2081 del pyauto_suite 2266 del pyauto_suite
2082 sys.exit(not result.wasSuccessful()) 2267 sys.exit(not result.wasSuccessful())
2083 2268
2084 2269
2085 if __name__ == '__main__': 2270 if __name__ == '__main__':
2086 Main() 2271 Main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698