from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from .base import wait class PostPage: def __init__(self, test): self.test = test def get_table_rows(self): return self.test.browser.find_elements(By.CSS_SELECTOR, "#id_post_table tr") @wait def wait_for_row_in_post_table(self, line_text, line_number): expected_row_text = f"{line_number}. {line_text}" rows = self.get_table_rows() self.test.assertIn(expected_row_text, [row.text for row in rows]) def get_line_input_box(self): return self.test.browser.find_element(By.ID, "id_text") def add_post_line(self, line_text): new_line_no = len(self.get_table_rows()) + 1 self.get_line_input_box().send_keys(line_text) self.get_line_input_box().send_keys(Keys.ENTER) self.wait_for_row_in_post_table(line_text, new_line_no) return self def get_share_box(self): return self.test.browser.find_element( By.CSS_SELECTOR, 'input[name="recipient"]', ) def get_shared_with_list(self): return self.test.browser.find_elements( By.CSS_SELECTOR, ".post-recipient" ) def share_post_with(self, email): # Buddy-btn flow (post-Brief sprint): click bottom-left handshake, # type the email in the slide-out, click the .btn-confirm OK, wait # for the recipient chip. buddy_btn = self.test.browser.find_element(By.ID, "id_buddy_btn") buddy_btn.click() recipient = self.test.wait_for( lambda: self.test.browser.find_element(By.ID, "id_recipient") ) recipient.send_keys(email) ok = self.test.browser.find_element( By.CSS_SELECTOR, "#id_buddy_panel .btn.btn-confirm" ) ok.click() self.test.wait_for( lambda: self.test.assertIn( email, [item.text for item in self.get_shared_with_list()] ) ) def get_post_owner(self): return self.test.browser.find_element(By.ID, "id_post_owner").text