Пример #1
0
class TwitterCommon:
    def __init__(self, driver):
        self.driver = driver
        self.utils = Utils(driver)

    def get_cookie(self, name):
        twitter_opened = self.utils.url_starts_with(TwitterUrls.twitter_url)
        if not twitter_opened:
            self.driver.get(TwitterUrls.twitter_url)

        return self.driver.get_cookie(name)
Пример #2
0
class Login:

    def __init__(self, driver):
        self.driver = driver
        self.twitter_common = TwitterCommon(driver)
        self.utils = Utils(driver)

    def __find_elements(self):
        try:
            username_or_email_field = WebDriverWait(self.driver, 5).until(EC.presence_of_element_located((By.NAME, "session[username_or_email]")))
            password_field = self.driver.find_element_by_name("session[password]")
        except:
            self.utils.handle_error("Login: username or password xpath outdated")

        return (username_or_email_field, password_field)

    @property
    def logged_in(self):
        return not not self.twitter_common.get_cookie("auth_token")

    def __submit_login_credentials(self, username_or_email, password):
        username_or_email_field, password_field = self.__find_elements()

        Utils.clear_fields(username_or_email_field, password_field)

        username_or_email_field.send_keys(username_or_email)
        password_field.send_keys(password)
        password_field.send_keys(Keys.ENTER)

    def __handle_login_errors(self):
        error = self.utils.url_starts_with("https://twitter.com/login/error")
        if not error:
            return

        try:
            error = self.driver.find_element_by_css_selector('div[class="css-901oao r-daml9f r-1qd0xha r-a023e6 r-16dba41 r-ad9z0x r-bcqeeo r-qvutc0"] > span[class="css-901oao css-16my406 r-1qd0xha r-ad9z0x r-bcqeeo r-qvutc0"]').text
        except Exception as err:
            error = err

        self.utils.handle_error(error)
        
    def login(self, username_or_email, password):
        if (self.logged_in):
            return

        self.utils.navigate(TwitterUrls.twitter_loginurl)
        self.__submit_login_credentials(username_or_email, password)

        self.__handle_login_errors()