base.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. from seleniumbase import BaseCase
  2. class Card(object):
  3. def __init__(self, tweet=''):
  4. card = tweet + '.card '
  5. self.link = card + 'a'
  6. self.title = card + '.card-title'
  7. self.description = card + '.card-description'
  8. self.destination = card + '.card-destination'
  9. self.image = card + '.card-image'
  10. class Quote(object):
  11. def __init__(self, tweet=''):
  12. quote = tweet + '.quote '
  13. namerow = quote + '.fullname-and-username '
  14. self.link = quote + '.quote-link'
  15. self.fullname = namerow + '.fullname'
  16. self.username = namerow + '.username'
  17. self.text = quote + '.quote-text'
  18. self.media = quote + '.quote-media-container'
  19. self.unavailable = quote + '.quote.unavailable'
  20. class Tweet(object):
  21. def __init__(self, tweet=''):
  22. namerow = tweet + '.tweet-header '
  23. self.fullname = namerow + '.fullname'
  24. self.username = namerow + '.username'
  25. self.date = namerow + '.tweet-date'
  26. self.text = tweet + '.tweet-content.media-body'
  27. self.retweet = tweet + '.retweet-header'
  28. self.reply = tweet + '.replying-to'
  29. class Profile(object):
  30. fullname = '.profile-card-fullname'
  31. username = '.profile-card-username'
  32. protected = '.icon-lock'
  33. verified = '.verified-icon'
  34. banner = '.profile-banner'
  35. bio = '.profile-bio'
  36. location = '.profile-location'
  37. website = '.profile-website'
  38. joinDate = '.profile-joindate'
  39. mediaCount = '.photo-rail-header'
  40. class Timeline(object):
  41. newest = 'div[class="timeline-item show-more"]'
  42. older = 'div[class="show-more"]'
  43. end = '.timeline-end'
  44. none = '.timeline-none'
  45. protected = '.timeline-protected'
  46. photo_rail = '.photo-rail-grid'
  47. media_view_tabs = '.media-view-tabs'
  48. media_view_timeline = '.media-view-tabs a[href*="view=timeline"]'
  49. media_view_grid = '.media-view-tabs a[href*="view=grid"]'
  50. media_view_gallery = '.media-view-tabs a[href*="view=gallery"]'
  51. media_view_active = '.media-view-tabs .tab-item.active a'
  52. grid_view = '.timeline.media-grid-view'
  53. gallery_view = '.timeline.media-gallery-view'
  54. class Search(object):
  55. tab_item = '.tab .tab-item'
  56. tab_active = '.tab .tab-item.active a'
  57. class Conversation(object):
  58. main = '.main-tweet'
  59. before = '.before-tweet'
  60. after = '.after-tweet'
  61. replies = '.replies'
  62. thread = '.reply'
  63. tweet = '.timeline-item'
  64. tweet_text = '.tweet-content'
  65. reply_sort = '.reply-sort'
  66. reply_sort_active = '.reply-sort-option.active'
  67. class Poll(object):
  68. votes = '.poll-info'
  69. choice = '.poll-meter'
  70. value = 'poll-choice-value'
  71. option = 'poll-choice-option'
  72. leader = 'leader'
  73. class Media(object):
  74. container = '.attachments'
  75. row = '.gallery-row'
  76. image = '.still-image'
  77. video = '.gallery-video'
  78. gif = '.media-gif'
  79. class BaseTestCase(BaseCase):
  80. def setUp(self):
  81. super(BaseTestCase, self).setUp()
  82. def tearDown(self):
  83. super(BaseTestCase, self).tearDown()
  84. def open_nitter(self, page=''):
  85. self.open(f'http://localhost:8080/{page}')
  86. def search_username(self, username):
  87. self.open_nitter()
  88. self.update_text('.search-bar input[type=text]', username)
  89. self.submit('.search-bar form')
  90. def get_timeline_tweet(num=1):
  91. return Tweet(f'.timeline > div:nth-child({num}) ')