1from __future__ import absolute_import
2from boto.mturk.test.support import unittest
3
4sel_args = ('localhost', 4444, '*chrome', 'https://workersandbox.mturk.com')
5
6class SeleniumFailed(object):
7	def __init__(self, message):
8		self.message = message
9	def __nonzero__(self):
10		return False
11
12def has_selenium():
13	try:
14		from selenium import selenium
15		globals().update(selenium=selenium)
16		sel = selenium(*sel_args)
17		# a little trick to see if the server is responding
18		try:
19			sel.do_command('shutdown', '')
20		except Exception as e:
21			if not 'Server Exception' in str(e):
22				raise
23		result = True
24	except ImportError:
25		result = SeleniumFailed('selenium RC not installed')
26	except Exception:
27		msg = 'Error occurred initializing selenium: %s' % e
28		result = SeleniumFailed(msg)
29
30	# overwrite has_selenium, so the same result is returned every time
31	globals().update(has_selenium=lambda: result)
32	return result
33
34identity = lambda x: x
35
36def skip_unless_has_selenium():
37	res = has_selenium()
38	if not res:
39		return unittest.skip(res.message)
40	return identity
41
42def complete_hit(hit_type_id, response='Some Response'):
43	verificationErrors = []
44	sel = selenium(*sel_args)
45	sel.start()
46	sel.open("/mturk/welcome")
47	sel.click("lnkWorkerSignin")
48	sel.wait_for_page_to_load("30000")
49	sel.type("email", "boto.tester@example.com")
50	sel.type("password", "BotoTest")
51	sel.click("Continue")
52	sel.wait_for_page_to_load("30000")
53	sel.open("/mturk/preview?groupId={hit_type_id}".format(**vars()))
54	sel.click("/accept")
55	sel.wait_for_page_to_load("30000")
56	sel.type("Answer_1_FreeText", response)
57	sel.click("//div[5]/table/tbody/tr[2]/td[1]/input")
58	sel.wait_for_page_to_load("30000")
59	sel.click("link=Sign Out")
60	sel.wait_for_page_to_load("30000")
61	sel.stop()
62