104 lines
2.8 KiB
Python
104 lines
2.8 KiB
Python
from seleniumbase import BaseCase
|
|
|
|
|
|
class Card(object):
|
|
def __init__(self, tweet=''):
|
|
card = tweet + '.card '
|
|
self.link = card + 'a'
|
|
self.title = card + '.card-title'
|
|
self.description = card + '.card-description'
|
|
self.destination = card + '.card-destination'
|
|
self.image = card + '.card-image'
|
|
|
|
|
|
class Quote(object):
|
|
def __init__(self, tweet=''):
|
|
quote = tweet + '.quote '
|
|
namerow = quote + '.fullname-and-username '
|
|
self.link = quote + '.quote-link'
|
|
self.fullname = namerow + '.fullname'
|
|
self.username = namerow + '.username'
|
|
self.text = quote + '.quote-text'
|
|
self.media = quote + '.quote-media'
|
|
self.unavailable = quote + '.quote.unavailable'
|
|
self.sensitive = quote + '.quote-sensitive'
|
|
self.badge = quote + '.quote-badge'
|
|
|
|
|
|
class Tweet(object):
|
|
def __init__(self, tweet=''):
|
|
namerow = tweet + '.tweet-header '
|
|
self.fullname = namerow + '.fullname'
|
|
self.username = namerow + '.username'
|
|
self.date = namerow + '.tweet-date'
|
|
self.text = tweet + '.tweet-content.media-body'
|
|
self.retweet = tweet + '.retweet'
|
|
self.reply = tweet + '.replying-to'
|
|
|
|
|
|
class Profile(object):
|
|
fullname = '.profile-card-fullname'
|
|
username = '.profile-card-username'
|
|
protected = '.icon-lock-circled'
|
|
verified = '.verified-icon'
|
|
banner = '.profile-banner'
|
|
bio = '.profile-bio'
|
|
location = '.profile-location'
|
|
website = '.profile-website'
|
|
joinDate = '.profile-joindate'
|
|
mediaCount = '.photo-rail-header'
|
|
|
|
|
|
class Timeline(object):
|
|
newest = 'div[class="timeline-item show-more"]'
|
|
older = 'div[class="show-more"]'
|
|
end = '.timeline-end'
|
|
none = '.timeline-none'
|
|
protected = '.timeline-protected'
|
|
|
|
|
|
class Conversation(object):
|
|
main = '.main-tweet'
|
|
before = '.before-tweet'
|
|
after = '.after-tweet'
|
|
replies = '.replies'
|
|
thread = '.reply'
|
|
tweet = '.timeline-item'
|
|
tweet_text = '.tweet-content'
|
|
|
|
|
|
class Poll(object):
|
|
votes = '.poll-info'
|
|
choice = '.poll-meter'
|
|
value = 'poll-choice-value'
|
|
option = 'poll-choice-option'
|
|
leader = 'leader'
|
|
|
|
|
|
class Media(object):
|
|
container = '.attachments'
|
|
row = '.gallery-row'
|
|
image = '.still-image'
|
|
video = '.gallery-video'
|
|
gif = '.gallery-gif'
|
|
|
|
|
|
class BaseTestCase(BaseCase):
|
|
def setUp(self):
|
|
super(BaseTestCase, self).setUp()
|
|
|
|
def tearDown(self):
|
|
super(BaseTestCase, self).tearDown()
|
|
|
|
def open_nitter(self, page=''):
|
|
self.open(f'http://localhost:5000/{page}')
|
|
|
|
def search_username(self, username):
|
|
self.open_nitter()
|
|
self.update_text('.search-bar input[type=text]', username)
|
|
self.submit('.search-bar form')
|
|
|
|
|
|
def get_timeline_tweet(num=1):
|
|
return Tweet(f'.timeline > div:nth-child({num}) ')
|