import time from views.base_element import EditBox, Button, BaseElement from views.base_view import BaseView from appium.webdriver.common.touch_action import TouchAction class BaseWebView(BaseView): def __init__(self, driver): super().__init__(driver) self.progress_bar_icon = Button(self.driver, xpath="//android.widget.ProgressBar") self.url_edit_box_lock_icon = Button(self.driver, xpath="'(//android.view.ViewGroup[@content-desc='icon'])[2]") self.policy_summary = Button(self.driver, xpath="//*[@content-desc='Status Privacy Policy'] | //*[@text='Status Privacy Policy']") self.terms_of_use_summary = Button(self.driver, xpath="//*[@content-desc='Status App Terms of Use']") self.browser_previous_page_button = Button(self.driver, accessibility_id="previous-page-button") self.browser_next_page_button = Button(self.driver, accessibility_id="next-page-button") self.web_view_browser = Button(self.driver, xpath="//*[contains(@text,'WebView Browser Tester')]") self.always_button = Button(self.driver, xpath="//*[contains(@text,'ALWAYS')]") self.browser_refresh_page_button = Button(self.driver, accessibility_id="refresh-page-button") self.share_url_button = Button(self.driver, accessibility_id="share") self.go_back_button = Button(self.driver, translation_id="browsing-site-blocked-go-back") self.options_button = Button(self.driver, accessibility_id="browser-options") self.connect_account_button = Button(self.driver, accessibility_id="connect-account") self.connected_account_button = Button(self.driver, accessibility_id="connected-account") self.open_chat_from_dapp_button = Button(self.driver, accessibility_id="open-chat") self.new_tab_button = Button(self.driver, accessibility_id="new-tab") self.continue_anyway_button = Button(self.driver, translation_id="continue-anyway") self.open_tabs_button = Button(self.driver, accessibility_id="browser-open-tabs") self.open_new_tab_plus_button = Button(self.driver, accessibility_id="plus-button") self.close_all_button = Button(self.driver, accessibility_id="close-all") self.empty_tab_button = Button(self.driver, accessibility_id="tab-itemEmpty tab") self.camera_image_in_dapp = BaseElement(self.driver, class_name="android.widget.Image") self.close_privacy_policy_button = Button(self.driver, xpath="//androidx.appcompat.widget.LinearLayoutCompat") # bookmarks management self.add_remove_favorites_button = Button(self.driver, accessibility_id="add-remove-fav") self.bookmark_name_input = EditBox(self.driver, accessibility_id="bookmark-input") self.save_bookmark_button = Button(self.driver, accessibility_id="save-bookmark") def wait_for_d_aap_to_load(self, wait_time=35): self.driver.info("Waiting %ss for dapp to load" % wait_time) counter = 0 while self.progress_bar_icon.is_element_displayed(5): time.sleep(1) counter += 1 if counter > wait_time: self.driver.fail("Page is not loaded during %s seconds" % wait_time) def open_in_webview(self): self.driver.info("Opening in webview") if self.web_view_browser.is_element_displayed(): self.web_view_browser.click() if self.always_button.is_element_displayed(): self.always_button.click() def remove_tab(self, name='', clear_all=False): self.open_tabs_button.click() if clear_all: self.driver.info("Closing all tabs") self.close_all_button.click() else: self.driver.info("Removing '%s' from recent websites" % name) close_button = Button(self.driver, xpath="//*[contains(@text, '%s')]/../../../../*[@content-desc='empty-tab']" % name) close_button.scroll_to_element() close_button.click() def edit_bookmark_name(self, name): self.driver.info("Editing bookmark name to '%s'" % name) self.bookmark_name_input.clear() self.bookmark_name_input.send_keys(name) self.save_bookmark_button.click() def add_to_bookmarks(self, name=''): self.driver.info("Adding '%s' to bookmarks" % name) self.options_button.click() self.add_remove_favorites_button.click() if name: self.edit_bookmark_name(name) bookmark_name = name else: bookmark_name = self.bookmark_name_input.text self.save_bookmark_button.click() return bookmark_name def open_right_collapsed_menu(self): # written for status.im size = self.driver.get_window_size() TouchAction(self.driver).tap(None, size["width"] * 0.92, size["height"] * 0.2, 1).perform()