import time from factory.faker import Faker from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import By class TestContentMixin: content_data = [] autosave = True def check_auto_saving(self): if not self.autosave: return raise NotImplementedError() def check_content_auto_saving(self, object): if not self.autosave: return print('Check content autosaving',) self.assertEqual(object.content.all().count(), len(self.content_data)) for i, item in enumerate(object.content.all().order_by('position', '-created_at',)): item_data = self.content_data[i].get('data') for key, value in item_data.items(): print('real obj field value:', getattr(item, key, None)) print('expected value:', value) self.assertEqual(getattr(item, key), value) print('OK') def check_content(self, inside_el=None): print('Check content block') self.object_data['content'] = self.content_data block_add_el = self.wait_elem_name('block-add', inside_el) open_el = self.wait_elem_name('block-add-open', block_add_el) self.assertRaises(TimeoutException, lambda: self.wait_elem_name('block-add-close', block_add_el)) open_el.click() time.sleep(1) close_el = self.wait_elem_name('block-add-close', block_add_el) block_text_el = self.wait_elem_name('block-add-block-text', block_add_el) block_text_el.click() time.sleep(0.5) self.check_block_text(inside_el) block_image_el = self.wait_elem_name('block-add-block-image', block_add_el) block_image_el.click() time.sleep(0.5) self.check_block_image(inside_el) block_image_text_el = self.wait_elem_name('block-add-block-image-text', block_add_el) block_image_text_el.click() time.sleep(0.5) self.check_block_image_text(inside_el) block_images_el = self.wait_elem_name('block-add-block-images', block_add_el) block_images_el.click() time.sleep(0.5) self.check_block_images(inside_el) block_video_el = self.wait_elem_name('block-add-block-video', block_add_el) block_video_el.click() time.sleep(0.5) self.check_block_video(inside_el) def check_block_text(self, inside_el=None): print('Check block text') time.sleep(1) block_obj = {'type': 'text', 'data': {}} block_el = self.wait_elem_name('block-text', inside_el) title_el = self.wait_elem_name('block-text-title', block_el) text_el = self.wait_elem_name('block-text-text-wrap', block_el) text_el.find_element( By.XPATH, './/div[contains(@class, "redactor-layer")][@contenteditable]') self.content_data.append(block_obj) title = Faker('sentence', nb_words=6).generate({}) title_el.send_keys(title) block_obj['data']['title'] = title text = Faker('sentence', nb_words=50).generate({}) self.driver.execute_script("arguments[0].click();", text_el) self.driver.execute_script("arguments[0].innerHtml = arguments[1];", text_el, text) self.driver.execute_script("arguments[0].dispatchEvent(new Event('change'));", text_el) # text_el.send_keys(text) block_obj['data']['text'] = '
%s
' % text self.check_auto_saving() def check_block_image(self, inside_el=None): print('Check block image') time.sleep(1) block_obj = {'type': 'image', 'data': {}} block_el = self.wait_elem_name('block-image', inside_el) title_el = self.wait_elem_name('block-image-title', block_el) image_el = self.wait_elem_name('block-image-image', block_el) self.content_data.append(block_obj) title = Faker('sentence', nb_words=6).generate({}) title_el.send_keys(title) block_obj['data']['title'] = title # TODO: check image upload self.check_auto_saving() def check_block_image_text(self, inside_el=None): print('Check block image-text') time.sleep(1) block_obj = {'type': 'image-text', 'data': {}} block_el = self.wait_elem_name('block-image-text', inside_el) title_el = self.wait_elem_name('block-image-text-title', block_el) text_el = self.wait_elem_name('block-image-text-text-wrap', block_el).find_element( By.XPATH, './/div[contains(@class, "redactor-layer")][@contenteditable]') image_el = self.wait_elem_name('block-image-text-image', block_el) self.content_data.append(block_obj) title = Faker('sentence', nb_words=6).generate({}) title_el.send_keys(title) block_obj['data']['title'] = title text = Faker('sentence', nb_words=50).generate({}) self.driver.execute_script("arguments[0].click();", text_el) self.driver.execute_script("arguments[0].innerHtml = arguments[1];", text_el, text) self.driver.execute_script("arguments[0].dispatchEvent(new Event('change'));", text_el) # text_el.send_keys(text) block_obj['data']['text'] = '%s
' % text # TODO: check image upload self.check_auto_saving() def check_block_images(self, inside_el=None): print('Check block images') def check_block_video(self, inside_el=None): print('Check block images')