class CompanyListTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr(DesiredCapabilities, browser).copy() ) self.page = CompaniesPage(self.driver) self.page.open() self.list = self.page.company_list def test_check_links(self): for link in self.list.links(): self.assertTrue(self.list.check_link(link)) def test_check_redirect(self): companies = self.list.get_all_companies() for i in companies: self.list.go_to_company_page(i) #self.page.wait_for_another_page() expected_title = i + u" в Москве" self.assertEquals(expected_title, self.page.get_title()) self.driver.back() def tearDown(self): # self.page.close() self.driver.quit()
class CompanyListTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr( DesiredCapabilities, browser).copy()) self.page = CompaniesPage(self.driver) self.page.open() self.list = self.page.company_list def test_check_links(self): for link in self.list.links(): self.assertTrue(self.list.check_link(link)) def test_check_redirect(self): companies = self.list.get_all_companies() for i in companies: self.list.go_to_company_page(i) #self.page.wait_for_another_page() expected_title = i + u" в Москве" self.assertEquals(expected_title, self.page.get_title()) self.driver.back() def tearDown(self): # self.page.close() self.driver.quit()
class MedicamentsClassificationTest(unittest.TestCase): def setUp(self): browser = os.environ.get('TTHA2BROWSER', 'CHROME') self.driver = Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr(DesiredCapabilities, browser).copy() ) self.page = MedicamentsPage(self.driver) self.page.open() self.classification_list = self.page.classification def test_drug_type_selection(self): text = u"Витамины" self.classification_list.to_link(text) self.page.wait_for_another_page() self.assertEquals(text, self.classification_list.get_title()) self.driver.back() text = u"Миорелаксанты" self.classification_list.to_link(text) self.page.wait_for_another_page() self.assertEquals(text, self.classification_list.get_title()) def tearDown(self): self.page.close() self.driver.quit()
class CatalogTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr(DesiredCapabilities, browser).copy() ) self.page = DrugsPage(self.driver) self.page.open() self.catalog = self.page.catalog def test_check_link(self): for link in self.catalog.links(): self.assertTrue(self.catalog.check_link(link)) def test_check_redirect(self): text = u"Витамины" self.catalog.to_link(text) #self.page.wait_for_another_page() self.assertEquals(text, self.page.get_title()) self.driver.back() text = u"Миорелаксанты" self.catalog.to_link(text) #self.page.wait_for_another_page() self.assertEquals(text, self.page.get_title()) def tearDown(self): #self.page.close() self.driver.quit()
class CatalogTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr( DesiredCapabilities, browser).copy()) self.page = DrugsPage(self.driver) self.page.open() self.catalog = self.page.catalog def test_check_link(self): for link in self.catalog.links(): self.assertTrue(self.catalog.check_link(link)) def test_check_redirect(self): text = u"Витамины" self.catalog.to_link(text) #self.page.wait_for_another_page() self.assertEquals(text, self.page.get_title()) self.driver.back() text = u"Миорелаксанты" self.catalog.to_link(text) #self.page.wait_for_another_page() self.assertEquals(text, self.page.get_title()) def tearDown(self): #self.page.close() self.driver.quit()
class MedicamentsClassificationTest(unittest.TestCase): def setUp(self): browser = os.environ.get('TTHA2BROWSER', 'CHROME') self.driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr( DesiredCapabilities, browser).copy()) self.page = MedicamentsPage(self.driver) self.page.open() self.classification_list = self.page.classification def test_drug_type_selection(self): text = u"Витамины" self.classification_list.to_link(text) self.page.wait_for_another_page() self.assertEquals(text, self.classification_list.get_title()) self.driver.back() text = u"Миорелаксанты" self.classification_list.to_link(text) self.page.wait_for_another_page() self.assertEquals(text, self.classification_list.get_title()) def tearDown(self): self.page.close() self.driver.quit()
class MedicamentsTestLeadersOfSellsTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr(DesiredCapabilities, browser).copy() ) self.page = MedicamentsPage(self.driver) self.page.open() self.list = self.page.leaders_of_sells def test_select_one_from_list(self): drug = self.list.get_drags_name(2) self.list.go_to_drugs_page(drug) self.page.wait_for_another_page() self.assertEquals(drug, self.list.result_drag()) self.driver.back() drug = self.list.get_drags_name(4) self.list.go_to_drugs_page(drug) self.page.wait_for_another_page() self.assertEquals(drug, self.list.result_drag()) def tearDown(self): self.page.close() self.driver.quit()
class MedicamentsTestLeadersOfSellsTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr( DesiredCapabilities, browser).copy()) self.page = DrugsPage(self.driver) self.page.open() self.drugs = self.page.leaders_of_sells def test_check_redirect(self): drags_names = self.drugs.get_all() for name in drags_names: self.drugs.go_to_drugs_page(name) #self.page.wait_for_another_page() self.assertEquals(name, self.page.get_title()) self.driver.back() def tearDown(self): #self.page.close() self.driver.quit()
class AnalogsTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr( DesiredCapabilities, browser).copy()) self.page = DrugPage(self.driver, 'vizarsin') self.page.open() self.analogs = self.page.analogs def test_analogs(self): drags_names = self.page.analogs.get_names() for name in drags_names: self.page.analogs.go_to_drugs_page(name) #self.page.wait_for_another_page() self.assertEquals( name.split(',')[0], self.page.analogs.result_drag()) self.driver.back() def tearDown(self): # self.page.close() self.driver.quit()
class AnalogsTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr(DesiredCapabilities, browser).copy() ) self.page = DrugPage(self.driver, 'vizarsin') self.page.open() self.analogs = self.page.analogs def test_analogs(self): drags_names = self.page.analogs.get_names() for name in drags_names: self.page.analogs.go_to_drugs_page(name) #self.page.wait_for_another_page() self.assertEquals(name.split(',')[0], self.page.analogs.result_drag()) self.driver.back() def tearDown(self): # self.page.close() self.driver.quit()
class MedicamentsTestLeadersOfSellsTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr(DesiredCapabilities, browser).copy() ) self.page = DrugsPage(self.driver) self.page.open() self.drugs = self.page.leaders_of_sells def test_check_redirect(self): drags_names = self.drugs.get_all() for name in drags_names: self.drugs.go_to_drugs_page(name) #self.page.wait_for_another_page() self.assertEquals(name, self.page.get_title()) self.driver.back() def tearDown(self): #self.page.close() self.driver.quit()
class CounterTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote( command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr(DesiredCapabilities, browser).copy() ) self.page = DrugPage(self.driver, 'vizarsin') self.page.open() self.counter = self.page.counter def test_counter_visible(self): self.assertFalse(self.counter.counter_is_visible()) self.counter.to_order() self.counter.selected_dropdown_item_by_number(1) self.assertTrue(self.counter.counter_is_visible()) def test_counter(self): self.page.login() self.counter.to_order() self.counter.selected_dropdown_item_by_number(1) self.assertEquals(1, int(self.counter.get_counter_value())) self.counter.increment() self.counter.increment() self.assertEquals(3, int(self.counter.get_counter_value())) self.counter.decrement() self.assertEquals(2, int(self.counter.get_counter_value())) def test_counter_in_basket(self): self.page.login() self.counter.to_order() self.counter.selected_dropdown_item_by_number(1) self.counter.do_order() #self.page.wait_for_another_page() self.assertEquals(1, int(self.counter.get_counter_value())) self.driver.back() self.counter.increment() self.counter.increment() self.counter.do_order() #self.page.wait_for_another_page() self.assertEquals(3, int(self.counter.get_counter_value())) self.driver.back() self.counter.decrement() self.counter.do_order() #self.page.wait_for_another_page() self.assertEquals(2, int(self.counter.get_counter_value())) def test_negative_counter_value(self): self.counter.to_order() self.counter.selected_dropdown_item_by_number(1) self.counter.decrement() self.assertFalse(self.counter.counter_is_visible()) def test_check_type(self): self.page.login() self.counter.to_order() types = self.counter.dropdown_items() for t in types: self.counter.selected_dropdown_item(t) self.counter.do_order() # self.page.wait_for_another_page() self.assertEquals(t, self.counter.result_type()) self.driver.back() self.counter.decrement() self.counter.to_order() def tearDown(self): #self.page.close() self.driver.quit()
class BasePage(object): def __init__(self, project_name): self.driver = '' self.loc = '' self.project_name = project_name yamlPath = "user.yaml" yaml.load(yamlPath, Loader=yaml.BaseLoader) yaml.warnings({'YAMLLoadWarning': False}) f = open(yamlPath, 'r') temp = yaml.load(f.read()) self.url = temp[project_name]['url'] self.username = temp[project_name]['username'] self.password = temp[project_name]['password'] def open(self, browser="chrome", host='http://localhost:8081/wd/hub' ): # 初始化 打开浏览器 并最大化 self 与java中的this中一样,调用时不用传入self参数 try: self.driver = Remote(command_executor=host, desired_capabilities={ 'platform': 'ANY', 'browserName': browser, 'version': '', 'javascriptEnabled': True }) self.driver.maximize_window() except Exception as e: print(e) logger_cls.info(u"打开{0}浏览器".format(browser)) logger_cls.info(u"最大化") def get(self): try: self.driver.get(self.url) self.driver.implicitly_wait(10) # 隐性等待,最长等10秒 logger_cls.info(u'打开:{0}'.format(self.url)) except BaseException: logger_cls.error(u'打开{0}失败'.format(self.url)) self.loc = loc.Analyze(self.project_name) #初始化,读取xml 赋值给loc def find(self, name): #元素定位,并返回定位好的元素 try: el = WebDriverWait(self.driver, 3, 0.5).until( #设置显示等待时间,每0.5秒检查一次,如果超出指定值就报错 EC.presence_of_element_located( (self.loc[name].type, self.loc[name].UIIdentifier))) logger_cls.info(u'定位元素:{0}'.format(name)) # logger_cls.info(loc[name].value) except BaseException: logger_cls.error(u'定位元素:{0}失败'.format(name)) return el def send_keys(self, name, text): try: self.find(name).send_keys(text) logger_cls.info(u'在:{0}输入{1}'.format(name, text)) time.sleep(3) except BaseException: logger_cls.error(u'在:{0}输入{1}失败'.format(name, text)) def click(self, name): try: self.find(name).click() logger_cls.info(u'点击:{0}'.format(name)) time.sleep(3) except BaseException: logger_cls.error(u'点击:{0}失败'.format(name)) def being(self, name): t = False try: self.driver.find_element_by_xpath(self.loc[name].UIIdentifier) t = True logger_cls.info(u'{0}元素存在'.format(name)) except BaseException: logger_cls.info(u'{0}元素不存在'.format(name)) return t def login(self): self.get() self.send_keys(u'用户名', self.username) self.send_keys(u'密码', self.password) self.click(u'登录') time.sleep(3) if self.being(u'不再提示'): self.click(u'不再提示') # self.get_version() def clearmonitor(self): names = [u'博主', u'博主圈'] self.click(u'事件') if self.being(u'是否有事件'): self.focus(u'找回') self.click(u'多选') self.click(u'全选') self.click(u'删除') for name in names: self.click(name) if self.being(u'是否有博主'): self.focus(u'找回') self.click(u'多选') self.click(u'全选') self.click(u'删除') def randomclick(self, name, div=None): text = '' i = len(self.driver.find_elements_by_xpath( self.loc[name].UIIdentifier)) logger_cls.info(u'{0}列表中有{1}个参数'.format(name, i)) y = random.randint(1, i) if div == None: path = self.loc[name].UIIdentifier + '[' + str(y) + ']' text = self.driver.find_element_by_xpath(path).text self.driver.find_element_by_xpath(path).click() logger_cls.info(u'随机选择列表中的{0}第个参数并点击'.format(y)) else: i2 = len( self.driver.find_elements_by_xpath( self.loc[name].UIIdentifier + '[' + str(y) + ']')) y2 = random.randint(1, i2) path = self.loc[name].UIIdentifier + '[' + str(y2) + ']' + div text = self.driver.find_element_by_xpath(path).text self.driver.find_element_by_xpath(path).click() logger_cls.info(u'随机选择列表中的{0}第个参数并点击'.format(y2)) logger_cls.info(u'{0}:文本的值为:{1}'.format(name, text)) time.sleep(3) return text def close(self): logger_cls.info(u'3秒后关闭当前页面') time.sleep(3) self.driver.close() def quit(self): logger_cls.info(u'3秒后关闭浏览器') time.sleep(3) self.driver.quit() def get_url(self): url = self.driver.current_url logger_cls.info(u'当前页面url:' + url) return url def get_text(self, name): text = self.find(name).text logger_cls.info(u'{0}文本框的值为:{1}'.format(name, text)) return text def back(self): self.driver.back() logger_cls.info(u'返回上一页面') def clear(self, name): self.find(name).clear() logger_cls.info(u'清空文本框:{0}'.format(name)) def get_name(self): name = self.driver.name logger_cls.info(u'浏览器名称:{0}'.format(name)) def get_driver(self): return self.driver def get_version(self): version = self.driver.capabilities['version'] logger_cls.info(u'浏览器版本:{0}'.format(version)) return version def switch_to(self): self.driver.switch_to.window(self.driver.window_handles[-1]) logger_cls.info(u'切换页面') def focus(self, name): ele = self.find(name) ActionChains(self.driver).move_to_element(ele).perform() logger_cls.info(u'鼠标悬停到元素:{0}'.format(name)) def refresh(self): self.driver.refresh() logger_cls.info(u'刷新页面') def title(self): title = self.driver.title logger_cls.info(u'当前页面标题' + title) return title def Slide(self, height): js = "var q=document.documentElement.scrollTop={0}".format(str(height)) self.driver.execute_script(js) logger_cls.info(u'上下滑动' + str(height)) def sleep(self, i): logger_cls.info(u'暂停{0}秒'.format(i)) time.sleep(int(i)) def Screenshot(self, name): # name='screenshot_' isExists = os.path.exists("../images\\") # 判断结果 if not isExists: # 如果不存在则创建目录 # 创建目录操作函数 os.makedirs("../images\\") print u'创建images目录' timestrmap = time.strftime('%Y%m%d_%H%M%S') imgPath = os.path.join('../images\\', str(timestrmap) + name + '.png') self.driver.save_screenshot(imgPath) logger_cls.info(u'截图:{0}{1}.png'.format(str(timestrmap), name))
class Test(unittest.TestCase): USEREMAIL = os.environ['USEREMAIL'] PASSWORD = os.environ['PASSWORD'] MESSAGE_TEXT = u'Привет! Тебе сообщение)' EMPTY_MESSAGE_TEXT = ' \n \t\t ' STYLE = 'display: block' ERROR_TYPE = u'Пожалуйста, выберите изображение (jpg/gif/png).' ERROR_SIZE = u'Размер изображения не должен превышать 20 Мб.' BIG_IMG_PATH = '/Zebras.jpg' NOT_IMG_PATH = '/basic.py' def setUp(self): browser = os.environ.get('BROWSER', 'CHROME') self.driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr( DesiredCapabilities, browser).copy()) auth_page = AuthPage(self.driver) auth_page.open() auth_form = auth_page.form auth_form.open_form() auth_form.set_login(self.USEREMAIL) auth_form.set_password(self.PASSWORD) auth_form.submit() user_name = auth_page.top_menu.get_username() create_page = CreatePage(self.driver) create_page.open() create_page.message_open() def test_send_message(self): message_form = MessageForm(self.driver) message_form.set_message_text(self.MESSAGE_TEXT) message_form.message_send() last_message_text = message_form.get_last_message_text() self.assertEqual(self.MESSAGE_TEXT, last_message_text) def test_send_empty_message(self): message_form = MessageForm(self.driver) message_form.set_message_text(self.EMPTY_MESSAGE_TEXT) message_form.message_send() messagebox_text = message_form.get_textarea_value() self.assertNotEqual(messagebox_text, u'') def test_go_to_the_dialogues(self): message_form = MessageForm(self.driver) message_form_url = self.driver.current_url message_form.back_to_dialogs() dialogs_url = self.driver.current_url self.assertNotEqual(message_form_url, dialogs_url) def test_go_to_the_friend_page(self): message_form = MessageForm(self.driver) message_form_friend_name = message_form.friend_name() message_form.go_to_friend_page() user_form = UserForm(self.driver) friend_name = user_form.user_name() self.assertEqual(message_form_friend_name, friend_name) def test_check_time(self): message_form = MessageForm(self.driver) message_form.set_message_text(self.MESSAGE_TEXT) message_form.message_send() last_message_time = message_form.get_last_message_time() self.assertEqual(datetime.strftime(datetime.now(), '%H:%M:%S'), str(last_message_time)) def test_avatar(self): self.driver.back() dialog_form = DialogForm(self.driver) dialog_avatar_src = dialog_form.get_dialogs_avatar_src() dialog_form.go_to_user_page() user_form = UserForm(self.driver) avatar_src = user_form.get_avatar_src() self.assertEqual(dialog_avatar_src, avatar_src) def test_open_close_img_window(self): message_form = MessageForm(self.driver) message_form.open_img_window() self.assertTrue(message_form.display_img_window()) message_form.close_img_window() self.assertFalse(message_form.display_img_window()) def test_cancel_add_img(self): message_form = MessageForm(self.driver) message_form.open_img_window() message_form.cancel_add_img() self.assertFalse(message_form.display_img_window()) def test_download_unselected_img(self): message_form = MessageForm(self.driver) message_form.open_img_window() message_form.download_img() error_message = message_form.get_error_message() self.assertEqual(error_message, self.ERROR_TYPE) def test_download_big_or_not_img(self): message_form = MessageForm(self.driver) message_form.open_img_window() message_form.choose_img_button() message_form.choose_img(self.BIG_IMG_PATH) message_form.download_img() error_message = message_form.get_error_message() self.assertEqual(error_message, self.ERROR_SIZE) self.driver.refresh() message_form.open_img_window() message_form.choose_img_button() message_form.choose_img(self.NOT_IMG_PATH) message_form.download_img() error_message = message_form.get_error_message() self.assertEqual(error_message, self.ERROR_TYPE) def tearDown(self): self.driver.quit()
class MedicamentPageTest(unittest.TestCase): def setUp(self): browser = os.environ.get('HW4BROWSER', 'CHROME') self.driver = Remote(command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=getattr( DesiredCapabilities, browser).copy()) self.page = MedicamentPage(self.driver, 'vizarsin') self.page.open() def test_contraindications(self): self.assertTrue(self.page.contraindication.check_links()) def test_counter(self): self.page.login() self.page.to_order() self.page.selected_type(1) self.assertEquals(1, int(self.page.get_number())) self.page.increment() self.page.increment() self.assertEquals(3, int(self.page.get_number())) self.page.decrement() self.assertEquals(2, int(self.page.get_number())) #проверка инкримента/дикримента в корзине def test_counter_in_basket(self): self.page.login() self.page.to_order() self.page.selected_type(1) self.page.do_order() self.page.wait_for_another_page() self.assertEquals(1, int(self.page.get_number_in_basket())) self.driver.back() self.page.increment() self.page.increment() self.page.do_order() self.page.wait_for_another_page() self.assertEquals(3, int(self.page.get_number_in_basket())) self.driver.back() self.page.decrement() self.page.do_order() self.page.wait_for_another_page() self.assertEquals(2, int(self.page.get_number_in_basket())) #проверка появление счетчика после выбора типа def test_counter_visible(self): self.assertFalse(self.page.counter_is_visible()) self.page.to_order() self.page.selected_type(1) self.assertTrue(self.page.counter_is_visible()) #проверка что нельзя ввести отрицательные значения def test_negative_counter_value(self): self.page.to_order() self.page.selected_type(1) self.page.decrement() self.assertFalse(self.page.counter_is_visible()) #проверка соответсвия типов def test_drugs_type_check(self): self.page.login() self.page.to_order() expected_type = self.page.selected_type(3) self.page.do_order() self.page.wait_for_another_page() self.assertEquals(expected_type, self.page.result_type()) self.driver.back() self.page.decrement() self.page.to_order() expected_type = self.page.selected_type(2) self.page.do_order() self.page.wait_for_another_page() self.assertEquals(expected_type, self.page.result_type()) def test_instructions(self): self.assertTrue(self.page.instructions.check_links()) def test_analogs(self): drug = self.page.analogs.get_drags_name(2) self.page.analogs.go_to_drugs_page(drug) self.page.wait_for_another_page() self.assertEquals(drug.split(',')[0], self.page.analogs.result_drag()) self.driver.back() drug = self.page.analogs.get_drags_name(3) self.page.analogs.go_to_drugs_page(drug) self.page.wait_for_another_page() self.assertEquals(drug.split(',')[0], self.page.analogs.result_drag()) def test_social_networks(self): self.assertTrue(self.page.social_networks.check_links()) def tearDown(self): self.page.close() self.driver.quit()
class Browser(object): def __init__(self, harness, selenium_server_url, selenium_browser, width=1024, height=600): self.harness = harness self.selenium_server_url = selenium_server_url self.selenium_browser = selenium_browser self.width = width self.height = height self.selenium = Remote( self.selenium_server_url.encode('ascii'), desired_capabilities = { 'browserName': self.selenium_browser, }, ) self.selenium.set_window_size(width, height) def __enter__(self): self.harness.browser_stack.append(self) return self def __exit__(self, type, value, traceback): if self.harness.browser_stack[-1] != self: raise Exception("Unexpected browser on the top of the stack") self.harness.browser_stack.pop() return def shutdown(self): self.selenium.quit() def back(self): self.selenium.back() def refresh(self): self.selenium.refresh() def title(self): return self.selenium.title def source(self): return self.selenium.page_source def get(self, uri): self.selenium.get(uri) def find(self, selector): return WebElementSet(self, elements=self.selenium).find(selector) def add_cookie(self, cookie_dict): self.selenium.add_cookie(cookie_dict) def get_cookie(self, name): return self.selenium.get_cookie(name) def endpoint(self): return self.find('html').attr('id').replace('endpoint-', '').replace('-', '.') def endpoint_is(self, endpoint): is_equal(self.endpoint(), endpoint, "Endpoint is correct") def wait_for_bootstrap_modal(self): last = [None] def inner_wait(driver): value = self.find('.modal')[-1].css('top') if last[0] and last[0] == value: return True last[0] = value return False WebDriverWait(self.selenium, 3).until(inner_wait) return self def url(self): return furl(self.selenium.current_url) def execute_script(self, script): return self.selenium.execute_script(script) def wait_for_ajax(self): WebDriverWait(self.selenium, 10).until_not(lambda x: x.execute_script('return jQuery.active')) return self def wait_for_jquery(self): WebDriverWait(self.selenium, 10).until(lambda x: x.execute_script('return window.jQuery ? true : false')) return self def screenshot(self, message="Screenshot: "): if 's3_access_key' not in app.settings.options('test'): print "No screenshot S3 instance configured - skipping screenshot" return if not hasattr(self, 's3_connection'): if 's3_host' in app.settings.options('test'): self.s3_connection = boto.s3.connection.S3Connection( app.settings.get('test', 's3_access_key'), app.settings.get('test', 's3_secret_key'), host = app.settings.get('test', 's3_host'), ) else: self.s3_connection = boto.s3.connection.S3Connection( app.settings.get('test', 's3_access_key'), app.settings.get('test', 's3_secret_key'), ) bucket = self.s3_connection.get_bucket(app.settings.get('test', 's3_bucket')) filename = "%s-%s.png" % (token.create_url_token(), self.harness.current_test_object.__class__.__name__) key = bucket.new_key(filename) key.metadata['Content-Type'] = 'image/png' key.metadata['Cache-Control'] = 'public, max-age=86400' key.set_contents_from_string(self.selenium.get_screenshot_as_png()) key.make_public() print "%s%s" % (message, key.generate_url(expires_in=0, query_auth=False))