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

Side by Side Diff: chrome/test/webdriver/webdriver_remote_tests.py

Issue 7331004: Move chromedriver tests to test subdirectory. Add script to run all chromedriver (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 9 years, 5 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
OLDNEW
(Empty)
1 #!/usr/bin/python
dennis_jeffrey 2011/07/08 01:26:40 This file seems to have been deleted, not moved.
kkania 2011/07/08 01:30:21 Sorry, should have included this as one of the exc
2 # Copyright (c) 2010 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 try:
7 import json
8 except ImportError: # < 2.6
9 import simplejson as json
10
11 import os
12 import optparse
13 import platform
14 import string
15 import subprocess
16 import sys
17 import time
18 import types
19 import unittest
20 import urllib2
21 from selenium.common.exceptions import ErrorInResponseException
22 from selenium.common.exceptions import NoSuchElementException
23 from selenium.remote.webdriver import WebDriver
24 from selenium.remote.webdriver.webelement import WebElement
25 from urlparse import urlparse
26
27
28 if sys.version_info < (2,6):
29 # Subprocess.Popen.kill is not available prior to 2.6.
30 if platform.system() == 'Windows':
31 import win32api
32 else:
33 import signal
34
35
36 WEBDRIVER_EXE = os.path.abspath(os.path.join('.', 'chromedriver'))
37 if platform.system() == 'Windows':
38 WEBDRIVER_EXE = '%s.exe' % WEBDRIVER_EXE
39 WEBDRIVER_PORT = 8080
40 WEBDRIVER_SERVER_URL = None
41 WEBDRIVER_PROCESS = None
42
43 if not WEBDRIVER_SERVER_URL:
44 WEBDRIVER_SERVER_URL = 'http://localhost:%d' % WEBDRIVER_PORT
45
46 class RemoteWebDriverTest(unittest.TestCase):
47 SEARCH = "http://www.google.com/webhp?hl=en"
48 NEWS = "http://www.google.com/news?hl=en"
49
50 """Verifies that navigation to a specific page is correct by asserting on the
51 the reported URL. The function will not work with pages that redirect."""
52 def navigate(self, url):
53 self.driver.get(url)
54 self.assertURL(url)
55
56 def assertURL(self, url):
57 u = self.driver.get_current_url()
58 self.assertEqual(u, url)
59
60 """A new instance of chrome driver is started for every test case"""
61 def setUp(self):
62 global WEBDRIVER_SERVER_URL
63 global WEBDRIVER_PROCESS
64 WEBDRIVER_PROCESS = subprocess.Popen([WEBDRIVER_EXE,
65 '--port=%d' % WEBDRIVER_PORT])
66 if WEBDRIVER_PROCESS == None:
67 print "Chromium executable not found. The path used was: "
68 print WEBDRIVER_EXE
69 sys.exit(-1)
70
71 time.sleep(5)
72 self.driver = WebDriver.WebDriver(WEBDRIVER_SERVER_URL, "chrome", "ANY")
73 self.assertTrue(self.driver)
74
75 def tearDown(self):
76 global WEBDRIVER_PROCESS
77 self.driver.quit()
78 if WEBDRIVER_PROCESS:
79 if sys.version_info < (2,6):
80 # From http://stackoverflow.com/questions/1064335
81 if platform.system() == 'Windows':
82 PROCESS_TERMINATE = 1
83 handle = win32api.OpenProcess(PROCESS_TERMINATE, False,
84 WEBDRIVER_PROCESS.pid)
85 win32api.TerminateProcess(handle, -1)
86 win32api.CloseHandle(handle)
87 else:
88 os.kill(WEBDRIVER_PROCESS.pid, signal.SIGKILL)
89 else:
90 WEBDRIVER_PROCESS.kill()
91 WEBDRIVER_PROCESS = None
92
93 """Preforms a string search ignoring case"""
94 def assertFind(self, text, search):
95 text = string.lower(text)
96 search = string.lower(search)
97 self.assertNotEqual(-1, string.find(text, search))
98
99
100 class TestFindElement(RemoteWebDriverTest):
101 def testFindByName(self):
102 self.navigate(SEARCH)
103 # Find the Google search button.
104 q = self.driver.find_element_by_name("q")
105 self.assertTrue(isinstance(q, WebElement))
106 # Trying looking for an element not on the page.
107 self.assertRaises(NoSuchElementException,
108 self.driver.find_elment_by_name, "q2")
109 # Try to find the Google search button using the multiple find method.
110 q = self.driver.find_elements_by_name("q")
111 self.assertTrue(isinstance(q, list))
112 self.assertTrue(len(q), 1)
113 self.assertTrue(isinstance(q[0], WebElement))
114 # Try finding something not on page, with multiple find an empty array
115 # should return and no exception thrown.
116 q = self.driver.find_elements_by_name("q2")
117 assertTrue(q == [])
118 # Find a hidden element on the page
119 q = self.driver.find_element_by_name("oq")
120 self.assertTrue(isinstance(q, WebElement))
121
122 def testFindElementById(self):
123 self.navigate(SEARCH)
124 # Find the padding for the logo near the search bar.
125 elem = self.driver.find_element_by_id("logocont")
126 self.assertTrue(isinstance(elem, WebElement))
127 # Look for an ID not there.
128 self.assertRaises(NoSuchElementException,
129 self.driver.find_element_by_id, "logocont")
130
131 def testFindElementById0WithTimeout(self):
132 self.set_implicit_wait(0)
133 self.navigate(SEARCH)
134 # Find the padding for the logo near the search bar.
135 elem = self.driver.find_element_by_id("logocont")
136 self.assertTrue(isinstance(elem, WebElement))
137 self.set_implicit_wait(5000)
138 self.navigate(SEARCH)
139 # Look for an ID not there.
140 self.assertRaises(NoSuchElementException,
141 self.driver.find_element_by_id, "logocont")
142
143
144 class TestFindElement(RemoteWebDriverTest):
145 def testFindByName(self):
146 self.navigate(SEARCH)
147 # Find the Google search button.
148 q = self.driver.find_element_by_name("q")
149 self.assertTrue(isinstance(q, WebElement))
150 # Trying looking for an element not on the page.
151 self.assertRaises(NoSuchElementException,
152 self.driver.find_elment_by_name, "q2")
153 # Try to find the Google search button using the multiple find method.
154 q = self.driver.find_elements_by_name("q")
155 self.assertTrue(isinstance(q, list))
156 self.assertTrue(len(q), 1)
157 self.assertTrue(isinstance(q[0], WebElement))
158 # Try finding something not on page, with multiple find an empty array
159 # should return and no exception thrown.
160 q = self.driver.find_elements_by_name("q2")
161 assertTrue(q == [])
162 # Find a hidden element on the page
163 q = self.driver.find_element_by_name("oq")
164 self.assertTrue(isinstance(q, WebElement))
165
166 def testFindElementById(self):
167 self.navigate(SEARCH)
168 # Find the padding for the logo near the search bar.
169 elem = self.driver.find_element_by_id("logocont")
170 self.assertTrue(isinstance(elem, WebElement))
171 # Look for an ID not there.
172 self.assertRaises(NoSuchElementException,
173 self.driver.find_element_by_id, "logocont")
174
175
176 class TestJavaScriptExecution(RemoteWebDriverTest):
177 """ Test the execute javascript ability of the remote driver"""
178 def testNoModification(self):
179 self.driver.get("http://www.google.com")
180 title = self.driver.execute_script("return document.title")
181 self.assertEqual(title, self.driver.get_title())
182
183 def testModification(self):
184 self.driver.get("http://www.google.com")
185 title = self.driver.get_title()
186 self.assertFind(title, "google")
187 r = self.driver.execute_script("return document.Foo")
188 self.assertTrue(r == None)
189 self.driver.execute_script("document.Foo = \"Hello\"")
190 r = self.driver.execute_script("return document.Foo")
191 self.assertTrue(r == "Hello")
192
193 def testComplexObjectFetch(self):
194 self.driver.get("http://www.google.com")
195 loc = self.driver.execute_script("return window.location")
196 self.assertTrue(type(loc) is types.DictType)
197 self.assertTrue(loc.has_key("hostname"))
198 self.assertFind(loc["hostname"], "google")
199
200 def testJavascriptExeception(self):
201 self.driver.get("http://www.google.com")
202 self.assertRaises(ErrorInResponseException, self.driver.execute_script,
203 "return windows");
204
205 def testJavascriptWithNoReturn(self):
206 self.driver.get("http://www.google.com")
207 try:
208 ret = self.driver.execute_script("return window.foobar")
209 self.assertTrue(type(ret) is types.NoneType)
210 except:
211 self.assertTrue(False)
212
213
214 class TestNavigation(RemoteWebDriverTest):
215 def testNavigateToURL(self):
216 # No redirects are allowed on the google home page.
217 self.navigate(self.SEARCH)
218
219 def testGoBackWithNoHistory(self):
220 # Go back one page with nothing to go back to.
221 self.assertRaises(ErrorInResponseException, self.driver.back)
222
223 def testGoForwardWithNoHistory(self):
224 # Go forward with nothing to move forward to.
225 self.assertRaises(ErrorInResponseException, self.driver.forward)
226
227 def testNavigation(self):
228 # Loads two pages into chrome's navigation history.
229 self.navigate(self.NEWS)
230 self.navigate(self.SEARCH)
231
232 # Go back to news.
233 self.driver.back()
234 self.assertURL(self.NEWS)
235
236 # Move forward to search.
237 self.driver.forward()
238 self.assertURL(self.SEARCH)
239
240 # Verify refresh keeps us on the current page.
241 self.driver.refresh()
242 self.assertURL(self.SEARCH)
243
244 # Go back to the previous URL and refresh making sure
245 # we dont change the page.
246 self.driver.back()
247 self.assertURL(self.NEWS)
248 self.driver.refresh()
249 self.assertURL(self.NEWS)
250
251 def testGetTitle(self):
252 self.navigate(self.SEARCH)
253 title = self.driver.get_title()
254 # The google name must always be in the search title.
255 self.assertFind(title, u"google")
256
257 def testGetSource(self):
258 self.navigate(self.SEARCH)
259 source = self.driver.get_page_source()
260 self.assertFind(source, u"document.body.style") # Basic javascript.
261 self.assertFind(source, u"feeling lucky") # Lucky button.
262 self.assertFind(source, u"google search") # Searh button.
263
264
265 if __name__ == '__main__':
266 parser = optparse.OptionParser('%prog [options]')
267 parser.add_option('-u', '--url', dest='url', action='store',
268 type='string', default=None,
269 help=('Specifies the URL of a remote WebDriver server to '
270 'test against. If not specified, a server will be '
271 'started on localhost according to the --exe and '
272 '--port flags'))
273 parser.add_option('-e', '--exe', dest='exe', action='store',
274 type='string', default=None,
275 help=('Path to the WebDriver server executable that should '
276 'be started for testing; This flag is ignored if '
277 '--url is provided for a remote server.'))
278 parser.add_option('-p', '--port', dest='port', action='store',
279 type='int', default=8080,
280 help=('The port to start the WebDriver server executable '
281 'on; This flag is ignored if --url is provided for a '
282 'remote server.'))
283
284 (options, args) = parser.parse_args()
285 # Strip out our flags so unittest.main() correct parses the remaining.
286 sys.argv = sys.argv[:1]
287 sys.argv.extend(args)
288
289 if options.url:
290 WEBDRIVER_SERVER_URL = options.url
291 else:
292 if options.port:
293 WEBDRIVER_PORT = options.port
294 if options.exe:
295 WEBDRIVER_EXE = options.exe
296 if not os.path.exists(WEBDRIVER_EXE):
297 parser.error('WebDriver server executable not found:\n\t%s\n'
298 'Please specify a valid path with the --exe flag.'
299 % WEBDRIVER_EXE)
300
301 unittest.main()
OLDNEW
« chrome/test/webdriver/test/run_chromedriver_tests.py ('K') | « chrome/test/webdriver/upload.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698