import csv import logging import pytest from ui_automation_framework.core import TestStatus from ui_automation_framework.core.init_driver import InitDriver from ui_automation_framework.utils import CoreConfig from ui_automation_framework.utils import logger as cl @pytest.mark.usefixtures("set_up", "one_time_set_up") class TestTracks: @pytest.fixture(autouse=True) def classSetup(self): self.log = cl.Logger(logging.DEBUG) self.ts = TestStatus(self.driver) self.base_page = InitDriver(self.driver) @pytest.mark.parametrize( "offset", [i for i in range(0, 1086, 10)] ) def test_tracks(self, offset): self.base_page.go_to_url(CoreConfig.ENV_BASE_URL + "/report?offset={}".format(offset)) self.get_artists_tracks_data() self.get_social_media_data() self.get_spotify_charts_data() def get_artists_tracks_data(self): row_locator = "((//div[@id='tracks']//i[@class='warning'])/../parent::tr)[{}]" data = [] self.base_page.wait_for_element_visible("//table[@class='table w-100']", 130) if self.base_page.is_element_displayed(row_locator.format(1), "xpath"): mismatches = self.base_page.get_elements("((//div[@id='tracks']//i[@class='warning'])/../parent::tr)", "xpath") for i in range(1, len(mismatches)): row_data = self.base_page.get_text(row_locator.format(i), "xpath").split() track_name = self.base_page.get_text("((//div[@id='tracks']//i[@class='warning'])/../parent::tr)" "[{}]/../preceding::p[@id='track name'][1]".format(i), "xpath") isrc = row_data[0] country_code = row_data[1] date = row_data[2] dsp = row_data[3] delphi = row_data[4] rdb = row_data[5] diff = row_data[6] data.append([track_name, isrc, country_code, date, dsp, delphi, rdb, diff]) else: pass self.tracks_csv_writer(data) def get_social_media_data(self): artists = self.base_page.get_elements("//a[@name='artist_id']", "xpath") data = [] artist_ids = [] for artist in artists: artist_ids.append(self.base_page.get_text(element=artist)) self.log.info(artist_ids) for i in range(1, len(artists)): dates = self.get_column("(//div[@id='social'])[{}]//td[1]".format(i)) instagram = self.get_column("(//div[@id='social'])[{}]//td[2]".format(i)) facebook = self.get_column("(//div[@id='social'])[{}]//td[3]".format(i)) twitter = self.get_column("(//div[@id='social'])[{}]//td[4]".format(i)) for index, value in enumerate(instagram): if value == 'None': date = dates[index] data.append([artist_ids[i-1], 'instagram', date, value]) elif value == 'No data available': data.append([artist_ids[i-1], 'instagram', 'No social media data']) for index, value in enumerate(facebook): if value == 'None': date = dates[index] data.append([artist_ids[i-1], 'facebook', date, value]) elif value == 'No data available': data.append([artist_ids[i-1], 'facebook', 'No social media data']) for index, value in enumerate(twitter): if value == 'None': date = dates[index] data.append([artist_ids[i-1], 'twitter', date, value]) elif value == 'No data available': data.append([artist_ids[i-1], 'twitter', 'No social media data']) self.media_csv_writer(data) def get_spotify_charts_data(self): if self.base_page.is_element_displayed('charts error', 'name'): rows = self.base_page.get_elements('charts error', 'name') data = [] for row in rows: data.append([self.base_page.get_text(element=row)]) self.charts_csv_writer(data) def get_column(self, locator): column = self.base_page.get_elements(locator, "xpath") result = [] for el in column: result.append(self.base_page.get_text("", "", el)) return result def media_csv_writer(self, data): path = 'social_media_data.csv' with open(path, "a", newline='') as csv_file: writer = csv.writer(csv_file) writer.writerows(data) def tracks_csv_writer(self, data): path = 'tracks_data.csv' with open(path, "a", newline='') as csv_file: writer = csv.writer(csv_file) writer.writerows(data) def charts_csv_writer(self, data): path = 'charts_data.csv' with open(path, "a", newline='') as csv_file: writer = csv.writer(csv_file) writer.writerows(data)