import logging import unittest import allure import pytest from assertpy import assert_that from ui_automation_framework.utils import logger as cl from app.src.helpers.api_data_provider import ApiDataProvider from app.src.helpers.data_formaters import DataFormatter from app.src.pages.login_page import LoginPage from app.src.pages.profile_page import ProfilePage from app.src.pages.search_page import SearchPage from app.src.pages.track_page import TrackPage @pytest.mark.usefixtures("set_up", "one_time_set_up", "authorized_api") class AudienceDemographicsTest(unittest.TestCase): @pytest.fixture(autouse=True) def classSetup(self, authorized_api): self.api = authorized_api self.loginPage = LoginPage(self.driver, authorized_api) self.trackPage = TrackPage(self.driver, authorized_api) self.searchPage = SearchPage(self.driver, authorized_api) self.data_provider = ApiDataProvider(authorized_api) self.profilePage = ProfilePage(self.driver) self.log = cl.Logger(logging.DEBUG) @allure.story("https://data-analytics.atlassian.net/browse/AG-6520") @allure.severity(allure.severity_level.NORMAL) @allure.title("Top age tile") @allure.description("Additional tile for top age in age section if exists") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-6140" "https://data-analytics.atlassian.net/browse/AG-6141") @pytest.mark.smoke def test_demographics_with_and_without_top_age(self): market = "Algeria" spotify_track_with_top_age = "See you again (feat. Kali Uchis)" spotify_track_without_top_age = "Easy on me" self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market).select_search_tab() self.searchPage.search_for(spotify_track_with_top_age).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page() assert_that(self.trackPage.is_demographics_top_age_tile_present(), "Verified top age tile present").is_true() self.trackPage.click_back_button().click_back_button() self.searchPage.clear_search_field().search_for(spotify_track_without_top_age).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page() assert_that(self.trackPage.is_demographics_top_age_tile_not_present(), "Verified top age tile NOT present").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6520") @allure.severity(allure.severity_level.NORMAL) @allure.title("No top Gender") @allure.description("Size of gender tiles in demographics section should be equal") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-6140" "https://data-analytics.atlassian.net/browse/AG-6141") @pytest.mark.smoke def test_demographics_without_top_gender(self): spotify_track_without_top_gender = "Another love" apple_track_without_top_gender = "Another love" self.loginPage.login_as_regular_user().select_search_tab() self.searchPage.search_for(spotify_track_without_top_gender).open_track_page_from_results(1) self.trackPage.open_market_detailed_page() assert_that(self.trackPage.are_demographics_tiles_equal(), "Verified tiles are equal").is_true() self.trackPage.click_back_button().click_back_button() self.searchPage.clear_search_field().search_for(apple_track_without_top_gender).open_track_page_from_results(1) self.trackPage.open_market_detailed_page().select_demographics_dsp("APPLE MUSIC") assert_that(self.trackPage.are_demographics_tiles_equal(), "Verified tiles are equal").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6520") @allure.severity(allure.severity_level.NORMAL) @allure.title("Top gender") @allure.description("Top gender tile size should be bigger") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-6139" "https://data-analytics.atlassian.net/browse/AG-6142") @pytest.mark.smoke def test_demographics_with_top_gender(self): track_with_top_gender = "Dance Monkey" self.loginPage.login_as_regular_user().select_search_tab() self.searchPage.search_for(track_with_top_gender).open_track_page_from_results(1) self.trackPage.open_market_detailed_page() assert_that(self.trackPage.are_demographics_tiles_not_equal(), "Verified tiles are NOT equal").is_true() self.trackPage.select_demographics_dsp("APPLE MUSIC") assert_that(self.trackPage.are_demographics_tiles_not_equal(), "Verified tiles are NOT equal").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6520") @allure.severity(allure.severity_level.NORMAL) @allure.title("No streams for all vendors") @allure.description("Message in case no data available across all vendors") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-6151") @pytest.mark.smoke def test_demographics_no_streams_all_vendors(self): track_without_demographics = "Santa Tell Me" self.loginPage.login_as_regular_user().select_search_tab() self.searchPage.search_for(track_without_demographics).open_track_page_from_results(1) self.trackPage.open_market_detailed_page() assert_that(self.trackPage.is_no_demographics_available_for_all_vendors(), "Verified no demographics data available").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6520") @allure.severity(allure.severity_level.NORMAL) @allure.title("No streams for all vendors") @allure.description("Message in case no data available across all vendors") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-6151") @pytest.mark.smoke def test_demographics_no_streams_all_vendors_market(self): track_without_demographics = "Self Esteem" market = "Australia" self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market).select_search_tab() self.searchPage.search_for(track_without_demographics).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page() assert_that(self.trackPage.is_no_demographics_available_for_all_vendors(), "Verified no demographics data available").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6520") @allure.severity(allure.severity_level.NORMAL) @allure.title("No streams for vendor") @allure.description("Message if no vendor data in demographics section") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-6148") @pytest.mark.smoke def test_demographics_no_streams_for_vendor_market(self): track_without_apple_data = "dakiti" market = "Albania" self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market).select_search_tab() self.searchPage.search_for(track_without_apple_data).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page() assert_that(self.trackPage.is_audience_demographics_dispalyed(), "Demographics section is available").is_true() self.trackPage.select_demographics_dsp("APPLE MUSIC") assert_that(self.trackPage.no_apple_demographics_data(), "Verified no demographics data available for Apple").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6520") @allure.severity(allure.severity_level.NORMAL) @allure.title("Top gender tile") @allure.description("Size of top gender if exists") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-6140" "https://data-analytics.atlassian.net/browse/AG-6141") @pytest.mark.smoke def test_demographics_without_top_gender_market(self): spotify_track_without_top_gender = "Another love" apple_track_without_top_gender = "Another love" market = "Spain" self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market).select_search_tab() self.searchPage.search_for(spotify_track_without_top_gender).open_track_page_from_results(1) self.trackPage.open_market_detailed_page() assert_that(self.trackPage.are_demographics_tiles_equal(), "Verified tiles are equal").is_true() self.trackPage.click_back_button().click_back_button() self.searchPage.clear_search_field().search_for(apple_track_without_top_gender).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page().select_demographics_dsp("APPLE MUSIC") assert_that(self.trackPage.are_demographics_tiles_equal(), "Verified tiles are equal").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6520") @allure.severity(allure.severity_level.NORMAL) @allure.title("Top Gender") @allure.description("Displaying of additional tile for the top gender if exists") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-6139" "https://data-analytics.atlassian.net/browse/AG-6142") @pytest.mark.smoke def test_demographics_with_top_gender_market(self): track_with_top_gender = "Dance Monkey" market = "Australia" self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market).select_search_tab() self.searchPage.search_for(track_with_top_gender).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page() assert_that(self.trackPage.are_demographics_tiles_not_equal(), "Verified tiles are NOT equal").is_true() self.trackPage.select_demographics_dsp("APPLE MUSIC") assert_that(self.trackPage.are_demographics_tiles_not_equal(), "Verified tiles are NOT equal").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6520") @allure.severity(allure.severity_level.NORMAL) @allure.title("Demographics Popup") @allure.description("Opening, closing and content") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-6251" "https://data-analytics.atlassian.net/browse/AG-6252" "https://data-analytics.atlassian.net/browse/AG-6133") @pytest.mark.smoke def test_demographics_popup_opening(self): track = "dakiti" market = "United States" self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market).select_search_tab() self.searchPage.search_for(track).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page().scroll_to_demographics().click_audience_demographics_tile_1() assert_that(self.trackPage.is_demographics_popup_opened(), "Verified demographics popup is opened").is_true() self.trackPage.close_popup_tap_outside() assert_that(self.trackPage.is_demographics_popup_closed(), "Verified demographics popup is closed").is_true() self.trackPage.click_audience_demographics_tile_1() assert_that(self.trackPage.is_demographics_popup_opened(), "Verified demographics popup is opened").is_true() assert_that(self.trackPage.is_spotify_popup_content_displayed(), "Verified demographics popup content is displayed").is_true() self.trackPage.close_popup_by_swipe() assert_that(self.trackPage.is_demographics_popup_closed(), "Verified demographics popup is closed").is_true() self.trackPage.select_demographics_dsp("APPLE MUSIC").click_audience_demographics_tile_1() assert_that(self.trackPage.is_demographics_popup_opened(), "Verified demographics popup is opened").is_true() self.trackPage.close_popup_tap_outside() assert_that(self.trackPage.is_demographics_popup_closed(), "Verified demographics popup is closed").is_true() self.trackPage.click_audience_demographics_tile_1() assert_that(self.trackPage.is_demographics_popup_opened(), "Verified demographics popup is opened").is_true() assert_that(self.trackPage.is_apple_popup_content_displayed(), "Verified demographics popup content is displayed").is_true() @allure.story("https://data-analytics.atlassian.net/browse/AG-6520") @allure.severity(allure.severity_level.NORMAL) @allure.title("Age Subsection") @allure.description("Correctness and content for streams and %") @allure.testcase("https://data-analytics.atlassian.net/browse/AG-6216" "https://data-analytics.atlassian.net/browse/AG-6219" "https://data-analytics.atlassian.net/browse/AG-6218") @pytest.mark.smoke def test_demographics_age_subsection(self): test_data = self.data_provider.get_top_charts_spotify_track_data() track = test_data[0] isrc = test_data[1] market = ["United States", "us"] self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market[0]).select_search_tab() self.searchPage.search_for(track).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page() age_percentage_total_spotify = self.trackPage.get_card_age_demographics_cards_percentage() # the verification isn't strictly =100 as this is know deviation observed also on Portal assert_that(age_percentage_total_spotify, "Verified percentage total is 100%").is_greater_than_or_equal_to(98).is_less_than_or_equal_to(101) api_streams_data = self.trackPage.get_delphi_spotify_api_demographics(isrc, market[1]) ui_streams_data = self.trackPage.get_card_age_demographics_cards_streams() assert_that(ui_streams_data[:8]).is_equal_to(api_streams_data[:8]) self.trackPage.select_demographics_dsp("APPLE MUSIC") age_percentage_total_apple = self.trackPage.get_card_age_demographics_cards_percentage() # the verification isn't strictly =100 as this is know deviation observed also on Portal assert_that(age_percentage_total_apple, "Verified percentage total is 100%").is_greater_than_or_equal_to(98).is_less_than_or_equal_to(101) api_streams_data = self.trackPage.get_delphi_apple_api_demographics(isrc, market[1]) ui_streams_data = self.trackPage.get_card_age_demographics_cards_streams() assert_that(ui_streams_data[:7]).is_equal_to(api_streams_data[:7]) @allure.story("https://data-analytics.atlassian.net/browse/AG-7447") @allure.severity(allure.severity_level.NORMAL) @allure.title("UI/API integration") @allure.description("Correctness and content of age popups") @pytest.mark.smoke def test_demographics_gender_popups_api(self): test_data = self.data_provider.get_top_charts_spotify_track_data() track = test_data[0] isrc = test_data[1] market = ["United States", "us"] self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market[0]).select_search_tab() self.searchPage.search_for(track).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page() api_streams_data_spotify_male = self.trackPage.get_delphi_spotify_api_demographics_by_gender(isrc, market[1], "male") api_streams_data_spotify_female = self.trackPage.get_delphi_spotify_api_demographics_by_gender(isrc, market[1], "female") api_streams_data_spotify_unknown = self.trackPage.get_delphi_spotify_api_demographics_by_gender(isrc, market[1], "unknown") tile_data = self.trackPage.scroll_to_demographics().click_audience_demographics_tile_1().get_demographics_gender_tile_data() for stream in api_streams_data_spotify_male: assert_that(tile_data).described_as("Gender demographics data").contains(stream) self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_2().get_demographics_gender_tile_data() for stream in api_streams_data_spotify_female: assert_that(tile_data).described_as("Gender demographics data").contains(stream) self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_4().get_demographics_gender_tile_data() for stream in api_streams_data_spotify_unknown: assert_that(tile_data).described_as("Gender demographics data").contains(stream) @allure.story("https://data-analytics.atlassian.net/browse/AG-7447") @allure.severity(allure.severity_level.NORMAL) @allure.title("UI/API integration") @allure.description("Correctness and content of age popups") @pytest.mark.smoke def test_demographics_gender_popups_api_apple(self): test_data = self.data_provider.get_top_charts_spotify_track_data() track = test_data[0] isrc = test_data[1] market = ["United States", "us"] self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market[0]).select_search_tab() self.searchPage.search_for(track).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page().select_demographics_dsp("APPLE MUSIC") api_streams_data_apple_male = self.trackPage.get_delphi_apple_api_demographics_by_gender(isrc, market[1], "male") api_streams_data_apple_female = self.trackPage.get_delphi_apple_api_demographics_by_gender(isrc, market[1], "female") api_streams_data_apple_unknown = self.trackPage.get_delphi_apple_api_demographics_by_gender(isrc, market[1], "unknown") tile_data = self.trackPage.scroll_to_demographics().click_audience_demographics_tile_1().get_demographics_gender_tile_data() for stream in api_streams_data_apple_male: assert stream in tile_data, "API streams data is wrong for gender demographics" self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_2().get_demographics_gender_tile_data() for stream in api_streams_data_apple_female: assert stream in tile_data, "API streams data is wrong for gender demographics" self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_4().get_demographics_gender_tile_data() for stream in api_streams_data_apple_unknown: assert stream in tile_data, "API streams data is wrong for gender demographics" @allure.story("https://data-analytics.atlassian.net/browse/AG-7016") @allure.severity(allure.severity_level.NORMAL) @allure.title("Audience Demographics Tests (Apple)") @allure.description("Audience Demographics (by gender) -- checking the data in the appropriate popups") @pytest.mark.regression def test_demographics_gender_popups_data_apple(self): test_data = self.data_provider.get_top_charts_spotify_track_data() track = test_data[0] isrc = test_data[1] market = ["United States", "us"] days_period = 13 dates = self.data_provider.get_track_start_end_dates(isrc, days_period) start_date = DataFormatter.format_api_to_ui_dates(str(dates[0])) end_date = DataFormatter.format_api_to_ui_dates(str(dates[1])) self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market[0]).select_search_tab() self.searchPage.search_for(track).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page().select_demographics_dsp("APPLE MUSIC") api_streams_data_apple_male = self.trackPage.get_delphi_apple_api_demographics_by_gender_total(isrc, market[1], "male") api_streams_data_apple_female = self.trackPage.get_delphi_apple_api_demographics_by_gender_total(isrc, market[1], "female") api_streams_data_apple_unknown = self.trackPage.get_delphi_apple_api_demographics_by_gender_total(isrc, market[1], "unknown") tile_data_male = self.trackPage.get_audience_demographics_tile_1() tile_data_female = self.trackPage.get_audience_demographics_tile_2() tile_data_unknown = self.trackPage.get_audience_demographics_tile_4() assert_that(tile_data_male).contains(DataFormatter.round_streams_demographics(api_streams_data_apple_male)) assert_that(tile_data_female).contains(DataFormatter.round_streams_demographics(api_streams_data_apple_female)) assert_that(tile_data_unknown).contains(DataFormatter.round_streams_demographics(api_streams_data_apple_unknown)) tile_dates_by_age = self.trackPage.get_dates_by_age() assert_that(tile_dates_by_age).contains(start_date).contains(end_date) sum_genders = sum([api_streams_data_apple_unknown, api_streams_data_apple_female, api_streams_data_apple_male]) if abs(api_streams_data_apple_male / sum_genders - api_streams_data_apple_female / sum_genders) > 0.1: assert_that(self.trackPage.are_demographics_tiles_not_equal(), "Verified tiles are equal").is_true() else: assert_that(self.trackPage.are_demographics_tiles_equal(), "Verified tiles are NOT equal").is_true() tile_data = self.trackPage.scroll_to_demographics().click_audience_demographics_tile_1().get_demographics_gender_tile_data() assert_that(tile_data).contains(start_date).contains(end_date) self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_2().get_demographics_gender_tile_data() assert_that(tile_data).contains(start_date).contains(end_date) self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_4().get_demographics_gender_tile_data() # if the number listeners is less than 0.5% from total then we are indicating ~0% of listeners # in a given gender tile if api_streams_data_apple_unknown / sum_genders < 0.005: assert_that(tile_data).contains("~0%") assert_that(tile_data).contains(start_date).contains(end_date) self.trackPage.close_popup_tap_outside() @allure.story("https://data-analytics.atlassian.net/browse/AG-7016") @allure.severity(allure.severity_level.NORMAL) @allure.title("Audience Demographics Tests (Spotify)") @allure.description("Audience Demographics (by gender) -- checking the data in the appropriate popups") @pytest.mark.regression def test_demographics_gender_popups_data_spotify(self): test_data = self.data_provider.get_top_charts_spotify_track_data() track = test_data[0] isrc = test_data[1] market = ["France", "fr"] days_period = 13 dates = self.data_provider.get_track_start_end_dates(isrc, days_period) start_date = DataFormatter.format_api_to_ui_dates(str(dates[0])) end_date = DataFormatter.format_api_to_ui_dates(str(dates[1])) self.loginPage.login_as_regular_user() self.profilePage.open_profile_screen_and_select_market(market[0]).select_search_tab() self.searchPage.search_for(track).open_track_page_from_results(1) self.trackPage.open_market_specific_market_detailed_page() api_streams_data_spotify_male = self.trackPage.get_delphi_spotify_api_demographics_by_gender_total(isrc, market[1], "male") api_streams_data_spotify_female = self.trackPage.get_delphi_spotify_api_demographics_by_gender_total(isrc, market[1], "female") api_streams_data_spotify_unknown = self.trackPage.get_delphi_spotify_api_demographics_by_gender_total(isrc, market[1], "unknown") api_streams_data_spotify_neutral = self.trackPage.get_delphi_spotify_api_demographics_by_gender_total(isrc, market[1], "neutral") tile_data_male = self.trackPage.get_audience_demographics_tile_1() tile_data_female = self.trackPage.get_audience_demographics_tile_2() tile_data_unknown = self.trackPage.get_audience_demographics_tile_4() tile_data_neutral = self.trackPage.get_audience_demographics_tile_3() tile_dates_by_age = self.trackPage.get_dates_by_age() assert_that(tile_dates_by_age).contains(start_date).contains(end_date) rounded_female, rounded_male, rounded_unknown, rounded_neutral = map( DataFormatter.round_streams_demographics, [ api_streams_data_spotify_female, api_streams_data_spotify_male, api_streams_data_spotify_unknown, api_streams_data_spotify_neutral, ], ) assert_that(tile_data_male).contains(rounded_male) assert_that(tile_data_female).contains(rounded_female) assert_that(tile_data_unknown).contains(rounded_unknown) assert_that(tile_data_neutral).contains(rounded_neutral) sum_genders = sum( [ api_streams_data_spotify_unknown, api_streams_data_spotify_female, api_streams_data_spotify_male, api_streams_data_spotify_neutral, ] ) if abs(api_streams_data_spotify_male / sum_genders - api_streams_data_spotify_female / sum_genders) > 0.1: assert_that(self.trackPage.are_demographics_tiles_not_equal(), "Verified tiles are equal").is_true() else: assert_that(self.trackPage.are_demographics_tiles_equal(), "Verified tiles are NOT equal").is_true() tile_data = self.trackPage.scroll_to_demographics().click_audience_demographics_tile_1().get_demographics_gender_tile_data() assert_that(tile_data).contains(start_date).contains(end_date) self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_2().get_demographics_gender_tile_data() assert_that(tile_data).contains(start_date).contains(end_date) self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_3().get_demographics_gender_tile_data() assert_that(tile_data).contains(start_date).contains(end_date) # if the number listeners is less than 0.5% from total then we are indicating ~0% of listeners # in a given gender tile if api_streams_data_spotify_neutral / sum_genders < 0.005: assert_that(tile_data).contains("~0%") self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_4().get_demographics_gender_tile_data() assert_that(tile_data).contains(start_date).contains(end_date) self.trackPage.close_popup_tap_outside() @allure.story("https://data-analytics.atlassian.net/browse/AG-7016") @allure.severity(allure.severity_level.NORMAL) @allure.title("Audience Demographics Tests for global markets (Apple)") @allure.description("Audience Demographics (by gender) -- checking the data in the appropriate popups") @pytest.mark.regression def test_demographics_gender_popups_data_apple_global(self): test_data = self.data_provider.get_top_charts_spotify_track_data() track = test_data[0] isrc = test_data[1] market = ["Global", "_gl"] days_period = 13 dates = self.data_provider.get_track_start_end_dates(isrc, days_period) start_date = DataFormatter.format_api_to_ui_dates(str(dates[0])) end_date = DataFormatter.format_api_to_ui_dates(str(dates[1])) self.loginPage.login_as_regular_user() self.searchPage.search_for(track).open_track_page_from_results(1) self.trackPage.open_market_detailed_page().select_demographics_dsp("APPLE MUSIC") api_streams_data_apple_male = self.trackPage.get_delphi_apple_api_demographics_by_gender_total(isrc, market[1], "male") api_streams_data_apple_female = self.trackPage.get_delphi_apple_api_demographics_by_gender_total(isrc, market[1], "female") api_streams_data_apple_unknown = self.trackPage.get_delphi_apple_api_demographics_by_gender_total(isrc, market[1], "unknown") sum_genders = sum([api_streams_data_apple_unknown, api_streams_data_apple_female, api_streams_data_apple_male]) if abs(api_streams_data_apple_male / sum_genders - api_streams_data_apple_female / sum_genders) > 0.1: assert_that(self.trackPage.are_demographics_tiles_not_equal(), "Verified tiles are equal").is_true() else: assert_that(self.trackPage.are_demographics_tiles_equal(), "Verified tiles are NOT equal").is_true() tile_data = self.trackPage.scroll_to_demographics().click_audience_demographics_tile_1().get_demographics_gender_tile_data() assert_that(tile_data).contains(start_date).contains(end_date) self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_2().get_demographics_gender_tile_data() assert_that(tile_data).contains(start_date).contains(end_date) self.trackPage.close_popup_tap_outside() tile_data = self.trackPage.click_audience_demographics_tile_4().get_demographics_gender_tile_data() assert_that(tile_data).contains(start_date).contains(end_date) self.trackPage.close_popup_tap_outside()