e2e: update ci and made first group
This commit is contained in:
parent
44b8a4c0f4
commit
3499cdc123
|
@ -3,15 +3,15 @@ pipeline {
|
||||||
agent { label 'linux' }
|
agent { label 'linux' }
|
||||||
|
|
||||||
parameters {
|
parameters {
|
||||||
string(
|
|
||||||
name: 'NETWORK',
|
|
||||||
description: 'Name of test network to use.',
|
|
||||||
defaultValue: 'ropsten',
|
|
||||||
)
|
|
||||||
string(
|
string(
|
||||||
name: 'APK_NAME',
|
name: 'APK_NAME',
|
||||||
description: 'Filename of APK uploaded to SauceLabs.',
|
description: 'Filename of APK uploaded to SauceLabs.',
|
||||||
)
|
)
|
||||||
|
string(
|
||||||
|
name: 'KEYWORD_EXPRESSION',
|
||||||
|
description: 'This will run tests which contain names that match the given string expression (Optional)',
|
||||||
|
defaultValue: '',
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
options {
|
options {
|
||||||
|
@ -56,8 +56,8 @@ pipeline {
|
||||||
--rerun_count=2 \
|
--rerun_count=2 \
|
||||||
--testrail_report=True \
|
--testrail_report=True \
|
||||||
-m testrail_id \
|
-m testrail_id \
|
||||||
-m "not upgrade" \
|
-m \"not upgrade\" \
|
||||||
--network=${params.NETWORK} \
|
-k \"${params.KEYWORD_EXPRESSION}\" \
|
||||||
--apk=${params.APK_NAME}
|
--apk=${params.APK_NAME}
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,15 +8,10 @@ pipeline {
|
||||||
description: 'Name of the branch to checkout and build.',
|
description: 'Name of the branch to checkout and build.',
|
||||||
defaultValue: 'develop',
|
defaultValue: 'develop',
|
||||||
)
|
)
|
||||||
string(
|
|
||||||
name: 'NETWORK',
|
|
||||||
description: 'Name of test network to use.',
|
|
||||||
defaultValue: 'ropsten',
|
|
||||||
)
|
|
||||||
string(
|
string(
|
||||||
name: 'TEST_MARKERS',
|
name: 'TEST_MARKERS',
|
||||||
description: 'Marker expression for matching tests to run.',
|
description: 'Marker expression for matching tests to run.',
|
||||||
defaultValue: 'critical or high',
|
defaultValue: '',
|
||||||
)
|
)
|
||||||
string(
|
string(
|
||||||
name: 'APK_NAME',
|
name: 'APK_NAME',
|
||||||
|
@ -26,9 +21,14 @@ pipeline {
|
||||||
name: 'PR_ID',
|
name: 'PR_ID',
|
||||||
description: 'ID of the Pull Request triggering this build.',
|
description: 'ID of the Pull Request triggering this build.',
|
||||||
)
|
)
|
||||||
|
string(
|
||||||
|
name: 'KEYWORD_EXPRESSION',
|
||||||
|
description: 'This will run tests which contain names that match the given string expression (Optional)',
|
||||||
|
defaultValue: '',
|
||||||
|
)
|
||||||
string(
|
string(
|
||||||
name: 'TR_CASE_IDS',
|
name: 'TR_CASE_IDS',
|
||||||
description: 'IDs of the TestRail case, separated by a comma. (Optional)',
|
description: 'IDs of the TestRail case, separated by a comma (Optional)',
|
||||||
defaultValue: '',
|
defaultValue: '',
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -91,8 +91,8 @@ pipeline {
|
||||||
--numprocesses 15 \
|
--numprocesses 15 \
|
||||||
--rerun_count=2 \
|
--rerun_count=2 \
|
||||||
--testrail_report=True \
|
--testrail_report=True \
|
||||||
-m "${params.TEST_MARKERS}" \
|
-m \"${params.TEST_MARKERS}\" \
|
||||||
--network=${params.NETWORK} \
|
-k \"${params.KEYWORD_EXPRESSION}\" \
|
||||||
--apk=${params.APK_NAME} \
|
--apk=${params.APK_NAME} \
|
||||||
--build=PR-${params.PR_ID} \
|
--build=PR-${params.PR_ID} \
|
||||||
--pr_number=${params.PR_ID} \
|
--pr_number=${params.PR_ID} \
|
||||||
|
|
|
@ -3,11 +3,6 @@ pipeline {
|
||||||
agent { label 'linux' }
|
agent { label 'linux' }
|
||||||
|
|
||||||
parameters {
|
parameters {
|
||||||
string(
|
|
||||||
name: 'NETWORK',
|
|
||||||
description: 'Name of test network to use',
|
|
||||||
defaultValue: 'ropsten',
|
|
||||||
)
|
|
||||||
string(
|
string(
|
||||||
name: 'APK_NAME',
|
name: 'APK_NAME',
|
||||||
description: 'Filename of APK uploaded to SauceLabs (base for upgrade, usually release build)',
|
description: 'Filename of APK uploaded to SauceLabs (base for upgrade, usually release build)',
|
||||||
|
@ -16,6 +11,16 @@ pipeline {
|
||||||
name: 'APK_NAME_UPGRADE',
|
name: 'APK_NAME_UPGRADE',
|
||||||
description: 'Filename of APK of upgraded application (installed on top of base)',
|
description: 'Filename of APK of upgraded application (installed on top of base)',
|
||||||
)
|
)
|
||||||
|
string(
|
||||||
|
name: 'KEYWORD_EXPRESSION',
|
||||||
|
description: 'This will run tests which contain names that match the given string expression (Optional)',
|
||||||
|
defaultValue: '',
|
||||||
|
)
|
||||||
|
string(
|
||||||
|
name: 'TR_CASE_IDS',
|
||||||
|
description: 'IDs of the TestRail case, separated by a comma (Optional)',
|
||||||
|
defaultValue: '',
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
options {
|
options {
|
||||||
|
@ -32,7 +37,12 @@ pipeline {
|
||||||
} }
|
} }
|
||||||
}
|
}
|
||||||
stage('Test') {
|
stage('Test') {
|
||||||
steps {
|
steps { script {
|
||||||
|
/* for managing optional arguments */
|
||||||
|
def extraPytestOpts = ''
|
||||||
|
if (params.TR_CASE_IDS != '') {
|
||||||
|
extraPytestOpts = "--run_testrail_ids='${params.TR_CASE_IDS}'"
|
||||||
|
}
|
||||||
withCredentials([
|
withCredentials([
|
||||||
usernamePassword(
|
usernamePassword(
|
||||||
credentialsId: 'test-rail-api',
|
credentialsId: 'test-rail-api',
|
||||||
|
@ -56,18 +66,19 @@ pipeline {
|
||||||
dir('test/appium/tests') {
|
dir('test/appium/tests') {
|
||||||
sh """
|
sh """
|
||||||
python3 -m pytest \
|
python3 -m pytest \
|
||||||
-m upgrade \
|
-m "upgrade" \
|
||||||
|
-k \"${params.KEYWORD_EXPRESSION}\" \
|
||||||
--numprocesses 15 \
|
--numprocesses 15 \
|
||||||
--rerun_count=2 \
|
--rerun_count=2 \
|
||||||
--testrail_report=True \
|
--testrail_report=True \
|
||||||
--network=${params.NETWORK} \
|
|
||||||
--apk=${params.APK_NAME} \
|
--apk=${params.APK_NAME} \
|
||||||
--apk_upgrade=${params.APK_NAME_UPGRADE}
|
--apk_upgrade=${params.APK_NAME_UPGRADE} \
|
||||||
|
${extraPytestOpts}
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} }
|
||||||
}
|
}
|
||||||
|
|
||||||
post {
|
post {
|
||||||
|
|
|
@ -97,10 +97,11 @@ class TestrailReport(BaseTestReport):
|
||||||
|
|
||||||
def get_regression_cases(self):
|
def get_regression_cases(self):
|
||||||
test_cases = dict()
|
test_cases = dict()
|
||||||
test_cases['critical'] = 734
|
test_cases['critical'] = 730
|
||||||
test_cases['high'] = 735
|
|
||||||
test_cases['medium'] = 736
|
test_cases['medium'] = 736
|
||||||
test_cases['upgrade'] = 881
|
test_cases['upgrade'] = 881
|
||||||
|
test_cases['public_chat'] = 50654
|
||||||
|
test_cases['one_to_one_chat'] = 50655
|
||||||
case_ids = list()
|
case_ids = list()
|
||||||
for arg in argv:
|
for arg in argv:
|
||||||
if "run_testrail_ids" in arg:
|
if "run_testrail_ids" in arg:
|
||||||
|
@ -108,7 +109,7 @@ class TestrailReport(BaseTestReport):
|
||||||
case_ids = value.split(',')
|
case_ids = value.split(',')
|
||||||
if len(case_ids) == 0:
|
if len(case_ids) == 0:
|
||||||
if 'critical or high' in argv:
|
if 'critical or high' in argv:
|
||||||
for case in self.get_cases([test_cases['critical'], test_cases['high']]):
|
for case in self.get_cases([test_cases['critical'], test_cases['public_chat'], test_cases['one_to_one_chat']]):
|
||||||
case_ids.append(case['id'])
|
case_ids.append(case['id'])
|
||||||
elif 'upgrade' in argv and 'not upgrade' not in argv:
|
elif 'upgrade' in argv and 'not upgrade' not in argv:
|
||||||
for case in self.get_cases([test_cases['upgrade']]):
|
for case in self.get_cases([test_cases['upgrade']]):
|
||||||
|
|
|
@ -45,7 +45,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||||
|
|
||||||
chat_2 = home_2.get_chat(sender['username']).click()
|
chat_2 = home_2.get_chat(sender['username']).click()
|
||||||
receiver_message = chat_2.get_incoming_transaction(account_name)
|
receiver_message = chat_2.get_incoming_transaction(account_name)
|
||||||
timestamp_sender = sender_message.timestamp_message.text
|
timestamp_sender = sender_message.timestamp_command_message.text
|
||||||
if not receiver_message.is_element_displayed():
|
if not receiver_message.is_element_displayed():
|
||||||
self.drivers[0].fail('No message about incoming transaction in 1-1 chat is shown for receiver')
|
self.drivers[0].fail('No message about incoming transaction in 1-1 chat is shown for receiver')
|
||||||
receiver_message.transaction_status.wait_for_element_text(receiver_message.address_requested)
|
receiver_message.transaction_status.wait_for_element_text(receiver_message.address_requested)
|
||||||
|
@ -68,7 +68,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||||
send_bottom_sheet = sender_message.sign_and_send.click()
|
send_bottom_sheet = sender_message.sign_and_send.click()
|
||||||
send_bottom_sheet.next_button.click()
|
send_bottom_sheet.next_button.click()
|
||||||
send_bottom_sheet.sign_transaction()
|
send_bottom_sheet.sign_transaction()
|
||||||
updated_timestamp_sender = sender_message.timestamp_message.text
|
updated_timestamp_sender = sender_message.timestamp_command_message.text
|
||||||
if updated_timestamp_sender == timestamp_sender:
|
if updated_timestamp_sender == timestamp_sender:
|
||||||
self.errors.append("Timestamp of message is not updated after signing transaction")
|
self.errors.append("Timestamp of message is not updated after signing transaction")
|
||||||
chat_1.wallet_button.click()
|
chat_1.wallet_button.click()
|
||||||
|
|
|
@ -40,7 +40,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||||
|
|
||||||
chat_2 = home_2.get_chat(sender['username']).click()
|
chat_2 = home_2.get_chat(sender['username']).click()
|
||||||
receiver_message = chat_2.get_incoming_transaction()
|
receiver_message = chat_2.get_incoming_transaction()
|
||||||
timestamp_sender = sender_message.timestamp_message.text
|
timestamp_sender = sender_message.timestamp_command_message.text
|
||||||
if not receiver_message.is_element_displayed():
|
if not receiver_message.is_element_displayed():
|
||||||
self.drivers[0].fail('No message about incoming transaction in 1-1 chat is shown for receiver')
|
self.drivers[0].fail('No message about incoming transaction in 1-1 chat is shown for receiver')
|
||||||
receiver_message.transaction_status.wait_for_element_text(receiver_message.address_requested)
|
receiver_message.transaction_status.wait_for_element_text(receiver_message.address_requested)
|
||||||
|
@ -63,7 +63,7 @@ class TestCommandsMultipleDevices(MultipleDeviceTestCase):
|
||||||
send_message = sender_message.sign_and_send.click()
|
send_message = sender_message.sign_and_send.click()
|
||||||
send_message.next_button.click()
|
send_message.next_button.click()
|
||||||
send_message.sign_transaction(keycard=True)
|
send_message.sign_transaction(keycard=True)
|
||||||
updated_timestamp_sender = sender_message.timestamp_message.text
|
updated_timestamp_sender = sender_message.timestamp_command_message.text
|
||||||
if updated_timestamp_sender == timestamp_sender:
|
if updated_timestamp_sender == timestamp_sender:
|
||||||
self.errors.append("Timestamp of message is not updated after signing transaction")
|
self.errors.append("Timestamp of message is not updated after signing transaction")
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,6 @@ from dateutil import parser
|
||||||
from tests import marks
|
from tests import marks
|
||||||
from tests.base_test_case import MultipleDeviceTestCase, SingleDeviceTestCase, create_shared_drivers, \
|
from tests.base_test_case import MultipleDeviceTestCase, SingleDeviceTestCase, create_shared_drivers, \
|
||||||
MultipleSharedDeviceTestCase
|
MultipleSharedDeviceTestCase
|
||||||
from views.home_view import HomeView
|
|
||||||
from views.sign_in_view import SignInView
|
from views.sign_in_view import SignInView
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,106 +19,102 @@ class TestPublicChatMultipleDeviceMerged(MultipleSharedDeviceTestCase):
|
||||||
def setup_class(cls):
|
def setup_class(cls):
|
||||||
cls.drivers, cls.loop = create_shared_drivers(2)
|
cls.drivers, cls.loop = create_shared_drivers(2)
|
||||||
device_1, device_2 = SignInView(cls.drivers[0]), SignInView(cls.drivers[1])
|
device_1, device_2 = SignInView(cls.drivers[0]), SignInView(cls.drivers[1])
|
||||||
home_1, home_2 = device_1.create_user(), device_2.create_user()
|
cls.home_1, cls.home_2 = device_1.create_user(), device_2.create_user()
|
||||||
profile_1 = home_1.profile_button.click()
|
profile_1 = cls.home_1.profile_button.click()
|
||||||
cls.username_1 = profile_1.default_username_text.text
|
cls.username_1 = profile_1.default_username_text.text
|
||||||
profile_1.home_button.click()
|
profile_1.home_button.click()
|
||||||
home_2.home_button.click()
|
cls.home_2.home_button.click()
|
||||||
|
cls.public_chat_name = cls.home_1.get_random_chat_name()
|
||||||
|
cls.chat_1, cls.chat_2 = cls.home_1.join_public_chat(cls.public_chat_name), cls.home_2.join_public_chat(cls.public_chat_name)
|
||||||
|
|
||||||
@marks.testrail_id(5313)
|
@marks.testrail_id(5313)
|
||||||
@marks.critical
|
@marks.critical
|
||||||
@marks.skip
|
def test_public_chat_text_timestamps_while_on_different_tab(self):
|
||||||
#TODO: should be updated after https://github.com/status-im/status-react/issues/12936
|
message = 'hello'
|
||||||
def test_public_chat_messaging_emojis_timestamps(self):
|
self.chat_2.dapp_tab_button.click()
|
||||||
home_1, home_2 = HomeView(self.drivers[0]), HomeView(self.drivers[1])
|
self.chat_1.send_message(message)
|
||||||
home_1.just_fyi("Check preselected chats, redirect to status chat")
|
sent_time_variants = self.chat_1.convert_device_time_to_chat_timestamp()
|
||||||
home_1.plus_button.click_until_presence_of_element(home_1.join_public_chat_button)
|
timestamp = self.chat_1.chat_element_by_text(message).timestamp_on_tap
|
||||||
home_1.join_public_chat_button.click()
|
if timestamp not in sent_time_variants:
|
||||||
preselected_chats = ['#status', '#chitchat', '#defi', '#crypto', '#markets', '#dap-ps']
|
self.errors.append("Timestamp is not shown, expected: '%s', in fact: '%s'" % (sent_time_variants.join(','), timestamp))
|
||||||
for chat in preselected_chats:
|
self.chat_2.home_button.click(desired_view='chat')
|
||||||
if not home_1.element_by_text(chat).is_element_displayed():
|
for chat in self.chat_1, self.chat_2:
|
||||||
self.errors.append("'%s' text is not in the list of preselected chats" % chat)
|
chat.verify_message_is_under_today_text(message, self.errors)
|
||||||
home_1.element_by_text(preselected_chats[0]).click()
|
if self.chat_2.chat_element_by_text(message).username.text != self.username_1:
|
||||||
status_chat = home_1.get_chat_view()
|
self.errors.append("Default username '%s' is not shown next to the received message" % self.username_1)
|
||||||
if not status_chat.user_name_text != preselected_chats[0]:
|
self.errors.verify_no_errors()
|
||||||
self.errors.append('No redirect to chat if tap on #status chat')
|
|
||||||
status_chat.home_button.click()
|
|
||||||
|
|
||||||
public_chat_name = home_1.get_random_chat_name()
|
@marks.testrail_id(700719)
|
||||||
chat_1, chat_2 = home_1.join_public_chat(public_chat_name), home_2.join_public_chat(public_chat_name)
|
@marks.critical
|
||||||
|
def test_public_emoji(self):
|
||||||
home_1.just_fyi("Check sending text messages, emojis, usernames and timestamps on messages")
|
|
||||||
emoji_name = random.choice(list(emoji.EMOJI_UNICODE))
|
emoji_name = random.choice(list(emoji.EMOJI_UNICODE))
|
||||||
emoji_unicode = emoji.EMOJI_UNICODE[emoji_name]
|
emoji_unicode = emoji.EMOJI_UNICODE[emoji_name]
|
||||||
message, emoji_message = 'hello', emoji.emojize(emoji_name)
|
emoji_message = emoji.emojize(emoji_name)
|
||||||
chat_1.send_message(message)
|
self.chat_1.send_message(emoji_message)
|
||||||
|
for chat in self.chat_1, self.chat_2:
|
||||||
sent_time_variants = chat_1.convert_device_time_to_chat_timestamp()
|
if not chat.chat_element_by_text(emoji_unicode).is_element_displayed(30):
|
||||||
for chat in chat_1, chat_2:
|
|
||||||
chat.verify_message_is_under_today_text(message, self.errors)
|
|
||||||
timestamp = chat.chat_element_by_text(message).timestamp_message.text
|
|
||||||
if timestamp not in sent_time_variants:
|
|
||||||
self.errors.append(
|
|
||||||
"Timestamp is not shown, expected '%s', in fact '%s'" % (sent_time_variants.join(','), timestamp))
|
|
||||||
if chat_2.chat_element_by_text(message).username.text != self.username_1:
|
|
||||||
self.errors.append("Default username '%s' is not shown next to the received message" % self.username_1)
|
|
||||||
|
|
||||||
chat_1.send_message(emoji_message)
|
|
||||||
for chat in chat_1, chat_2:
|
|
||||||
if not chat.chat_element_by_text(emoji_unicode).is_element_displayed():
|
|
||||||
self.errors.append('Message with emoji was not sent or received in public chat')
|
self.errors.append('Message with emoji was not sent or received in public chat')
|
||||||
|
|
||||||
|
self.chat_1.just_fyi("Can copy and paste emojis")
|
||||||
|
self.chat_1.element_by_text_part(emoji_unicode).long_press_element()
|
||||||
|
self.chat_1.element_by_text('Copy').click()
|
||||||
|
self.chat_1.chat_message_input.paste_text_from_clipboard()
|
||||||
|
if self.chat_1.chat_message_input.text != emoji_unicode:
|
||||||
|
self.errors.append('Emoji message was not copied')
|
||||||
|
|
||||||
|
self.chat_1.just_fyi("Can reply to emojis")
|
||||||
|
self.chat_2.quote_message(emoji_unicode)
|
||||||
|
message_text = 'test message'
|
||||||
|
self.chat_2.chat_message_input.send_keys(message_text)
|
||||||
|
self.chat_2.send_message_button.click()
|
||||||
|
chat_element_1 = self.chat_1.chat_element_by_text(message_text)
|
||||||
|
if not chat_element_1.is_element_displayed(sec=10) or chat_element_1.replied_message_text != emoji_unicode:
|
||||||
|
self.errors.append('Reply message was not received by the sender')
|
||||||
self.errors.verify_no_errors()
|
self.errors.verify_no_errors()
|
||||||
|
|
||||||
@marks.testrail_id(5360)
|
@marks.testrail_id(5360)
|
||||||
@marks.critical
|
@marks.critical
|
||||||
def test_unread_messages_counter_public_chat(self):
|
def test_public_unread_messages_counter(self):
|
||||||
home_1, home_2 = HomeView(self.drivers[0]), HomeView(self.drivers[1])
|
self.chat_1.send_message('пиу')
|
||||||
home_1.get_back_to_home_view()
|
home_1 = self.chat_1.home_button.click()
|
||||||
home_2.get_back_to_home_view()
|
message = 'test message'
|
||||||
home_1.home_button.click()
|
self.chat_2.send_message(message)
|
||||||
home_2.home_button.click()
|
if not self.chat_1.home_button.public_unread_messages.is_element_displayed():
|
||||||
chat_name = home_1.get_random_chat_name()
|
|
||||||
chat_1, chat_2 = home_1.join_public_chat(chat_name), home_2.join_public_chat(chat_name)
|
|
||||||
chat_1.send_message('пиу')
|
|
||||||
chat_1.home_button.click()
|
|
||||||
message, message_2 = 'test message', 'test message2'
|
|
||||||
chat_2.send_message(message)
|
|
||||||
|
|
||||||
home_1.just_fyi(
|
|
||||||
"Check unread message indicator on home, on chat element and that it is not shown after reading messages")
|
|
||||||
if not home_1.home_button.public_unread_messages.is_element_displayed():
|
|
||||||
self.errors.append('New messages public chat badge is not shown on Home button')
|
self.errors.append('New messages public chat badge is not shown on Home button')
|
||||||
chat_element = home_1.get_chat('#' + chat_name)
|
chat_element = home_1.get_chat('#' + self.public_chat_name)
|
||||||
if not chat_element.new_messages_public_chat.is_element_displayed():
|
if not chat_element.new_messages_public_chat.is_element_displayed():
|
||||||
self.errors.append('New messages counter is not shown in public chat')
|
self.errors.append('New messages counter is not shown in public chat')
|
||||||
|
self.errors.verify_no_errors()
|
||||||
|
|
||||||
home_1.just_fyi("Check unread message counter when mentioned in public chat")
|
@marks.testrail_id(700718)
|
||||||
chat_2 = home_2.get_chat_view()
|
@marks.critical
|
||||||
chat_2.select_mention_from_suggestion_list(self.username_1, self.username_1[:2])
|
def test_public_unread_messages_counter_for_mentions_relogin(self):
|
||||||
chat_2.send_message_button.click()
|
message = 'test message2'
|
||||||
|
[chat.home_button.double_click() for chat in (self.chat_1, self.chat_2)]
|
||||||
|
chat_element = self.home_1.get_chat('#' + self.public_chat_name)
|
||||||
|
self.home_2.get_chat('#' + self.public_chat_name).click()
|
||||||
|
self.chat_2.select_mention_from_suggestion_list(self.username_1, self.username_1[:2])
|
||||||
|
self.chat_2.send_message_button.click()
|
||||||
chat_element.new_messages_counter.wait_for_element(30)
|
chat_element.new_messages_counter.wait_for_element(30)
|
||||||
chat_element.new_messages_counter.wait_for_element_text("1", 60)
|
chat_element.new_messages_counter.wait_for_element_text("1", 60)
|
||||||
|
|
||||||
chat_element.click()
|
chat_element.click()
|
||||||
home_1.home_button.double_click()
|
self.home_1.home_button.double_click()
|
||||||
|
if self.home_1.home_button.public_unread_messages.is_element_displayed():
|
||||||
if home_1.home_button.public_unread_messages.is_element_displayed():
|
|
||||||
self.errors.append('New messages public chat badge is shown on Home button')
|
self.errors.append('New messages public chat badge is shown on Home button')
|
||||||
if chat_element.new_messages_public_chat.is_element_displayed():
|
if chat_element.new_messages_public_chat.is_element_displayed():
|
||||||
self.errors.append('Unread messages badge is shown in public chat while there are no unread messages')
|
self.errors.append('Unread messages badge is shown in public chat while there are no unread messages')
|
||||||
[home.get_chat('#' + chat_name).click() for home in (home_1, home_2)]
|
[home.get_chat('#' + self.public_chat_name).click() for home in (self.home_1, self.home_2)]
|
||||||
chat_1.send_message(message_2)
|
self.chat_1.send_message(message)
|
||||||
chat_2.chat_element_by_text(message_2).wait_for_element(20)
|
self.chat_2.chat_element_by_text(message).wait_for_element(20)
|
||||||
|
|
||||||
home_2.just_fyi("Check that unread message indicator is not reappeared after relogin")
|
self.chat_2.just_fyi("Check that unread messages counter doesn't reappear after relogin")
|
||||||
driver_2 = self.drivers[1]
|
driver_2 = self.drivers[1]
|
||||||
driver_2.close_app()
|
driver_2.close_app()
|
||||||
driver_2.launch_app()
|
driver_2.launch_app()
|
||||||
SignInView(driver_2).sign_in()
|
SignInView(driver_2).sign_in()
|
||||||
chat_element = home_2.get_chat('#' + chat_name)
|
chat_element = self.home_2.get_chat('#' + self.public_chat_name)
|
||||||
if chat_element.new_messages_public_chat.is_element_displayed():
|
if chat_element.new_messages_public_chat.is_element_displayed():
|
||||||
self.errors.append('New messages counter is shown after relogin')
|
self.drivers[0].fail('New messages counter is shown after relogin')
|
||||||
self.errors.verify_no_errors()
|
self.errors.verify_no_errors()
|
||||||
|
|
||||||
|
|
||||||
|
@ -154,45 +149,6 @@ class TestPublicChatMultipleDevice(MultipleDeviceTestCase):
|
||||||
|
|
||||||
self.errors.verify_no_errors()
|
self.errors.verify_no_errors()
|
||||||
|
|
||||||
@marks.testrail_id(6275)
|
|
||||||
@marks.medium
|
|
||||||
def test_receive_message_while_in_different_tab_and_emoji_messages_long_press(self):
|
|
||||||
self.create_drivers(2)
|
|
||||||
device_1, device_2 = SignInView(self.drivers[0]), SignInView(self.drivers[1])
|
|
||||||
home_1, home_2 = device_1.create_user(), device_2.create_user()
|
|
||||||
public_chat_name = home_1.get_random_chat_name()
|
|
||||||
chat_1, chat_2 = home_1.join_public_chat(public_chat_name), home_2.join_public_chat(public_chat_name)
|
|
||||||
|
|
||||||
device_2.just_fyi("Switch to different tab out from chat")
|
|
||||||
device_2.dapp_tab_button.click()
|
|
||||||
emoji_name = random.choice(list(emoji.EMOJI_UNICODE))
|
|
||||||
emoji_unicode = emoji.EMOJI_UNICODE[emoji_name]
|
|
||||||
chat_1.chat_message_input.send_keys(emoji.emojize(emoji_name))
|
|
||||||
chat_1.send_message_button.click()
|
|
||||||
|
|
||||||
device_1.just_fyi("Long press emoji message actions")
|
|
||||||
chat_1.element_by_text_part(emoji_unicode).long_press_element()
|
|
||||||
chat_1.element_by_text('Copy').click()
|
|
||||||
chat_1.chat_message_input.paste_text_from_clipboard()
|
|
||||||
if chat_1.chat_message_input.text != emoji_unicode:
|
|
||||||
self.errors.append('Emoji message was not copied')
|
|
||||||
|
|
||||||
home_2.home_button.click(desired_view='chat')
|
|
||||||
chat_element_2 = chat_2.element_by_text_part(emoji_unicode)
|
|
||||||
if not chat_element_2.is_element_displayed(sec=10):
|
|
||||||
self.errors.append('Message with emoji was not received in public chat by the recipient')
|
|
||||||
|
|
||||||
chat_2.quote_message(emoji_unicode)
|
|
||||||
message_text = 'test message'
|
|
||||||
chat_2.chat_message_input.send_keys(message_text)
|
|
||||||
chat_2.send_message_button.click()
|
|
||||||
|
|
||||||
chat_element_1 = chat_1.chat_element_by_text(message_text)
|
|
||||||
if not chat_element_1.is_element_displayed(sec=10) or chat_element_1.replied_message_text != emoji_unicode:
|
|
||||||
self.errors.append('Reply message was not received by the sender')
|
|
||||||
|
|
||||||
self.errors.verify_no_errors()
|
|
||||||
|
|
||||||
@marks.testrail_id(6342)
|
@marks.testrail_id(6342)
|
||||||
@marks.medium
|
@marks.medium
|
||||||
def test_different_status_in_timeline(self):
|
def test_different_status_in_timeline(self):
|
||||||
|
|
|
@ -91,6 +91,20 @@ class BaseElement(object):
|
||||||
self.driver.info('Tap on found: %s' % self.name)
|
self.driver.info('Tap on found: %s' % self.name)
|
||||||
return self.navigate()
|
return self.navigate()
|
||||||
|
|
||||||
|
def click_until_presence_of_element(self, desired_element, attempts=4):
|
||||||
|
counter = 0
|
||||||
|
self.driver.info("Click until '%s' by '%s': `%s` will be presented" % (
|
||||||
|
desired_element.name, desired_element.by, desired_element.locator))
|
||||||
|
while not desired_element.is_element_present(1) and counter <= attempts:
|
||||||
|
try:
|
||||||
|
self.find_element().click()
|
||||||
|
desired_element.wait_for_element(5)
|
||||||
|
return self.navigate()
|
||||||
|
except (NoSuchElementException, TimeoutException):
|
||||||
|
counter += 1
|
||||||
|
else:
|
||||||
|
self.driver.info("%s element not found" % desired_element.name)
|
||||||
|
|
||||||
def double_click(self):
|
def double_click(self):
|
||||||
self.driver.info('Double tap on: %s' % self.name)
|
self.driver.info('Double tap on: %s' % self.name)
|
||||||
[self.find_element().click() for _ in range(2)]
|
[self.find_element().click() for _ in range(2)]
|
||||||
|
@ -352,19 +366,6 @@ class Button(BaseElement):
|
||||||
self.wait_for_visibility_of_element(sec)
|
self.wait_for_visibility_of_element(sec)
|
||||||
self.click()
|
self.click()
|
||||||
|
|
||||||
def click_until_presence_of_element(self, desired_element, attempts=4):
|
|
||||||
counter = 0
|
|
||||||
self.driver.info("Click until '%s' by '%s': `%s` will be presented" % (
|
|
||||||
desired_element.name, desired_element.by, desired_element.locator))
|
|
||||||
while not desired_element.is_element_present(1) and counter <= attempts:
|
|
||||||
try:
|
|
||||||
self.find_element().click()
|
|
||||||
desired_element.wait_for_element(5)
|
|
||||||
return self.navigate()
|
|
||||||
except (NoSuchElementException, TimeoutException):
|
|
||||||
counter += 1
|
|
||||||
else:
|
|
||||||
self.driver.info("%s element not found" % desired_element.name)
|
|
||||||
|
|
||||||
def click_until_absense_of_element(self, desired_element, attempts=3):
|
def click_until_absense_of_element(self, desired_element, attempts=3):
|
||||||
counter = 0
|
counter = 0
|
||||||
|
|
|
@ -84,6 +84,7 @@ class HomeButton(TabButton):
|
||||||
return self.navigate()
|
return self.navigate()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DappTabButton(TabButton):
|
class DappTabButton(TabButton):
|
||||||
def __init__(self, driver):
|
def __init__(self, driver):
|
||||||
super().__init__(driver, xpath="//*[contains(@content-desc,'tab, 2 out of 5')]")
|
super().__init__(driver, xpath="//*[contains(@content-desc,'tab, 2 out of 5')]")
|
||||||
|
|
|
@ -143,7 +143,7 @@ class ChatElementByText(Text):
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def timestamp_message(self):
|
def timestamp_command_message(self):
|
||||||
|
|
||||||
class TimeStampText(Button):
|
class TimeStampText(Button):
|
||||||
def __init__(self, driver, parent_locator: str):
|
def __init__(self, driver, parent_locator: str):
|
||||||
|
@ -151,6 +151,17 @@ class ChatElementByText(Text):
|
||||||
|
|
||||||
return TimeStampText(self.driver, self.locator)
|
return TimeStampText(self.driver, self.locator)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def timestamp_on_tap(self):
|
||||||
|
timestamp_element = Text(self.driver, xpath="//*[@content-desc='message-timestamp']")
|
||||||
|
try:
|
||||||
|
self.sent_status_checkmark.wait_for_element(30)
|
||||||
|
except NoSuchElementException:
|
||||||
|
return ''
|
||||||
|
self.sent_status_checkmark.click_until_presence_of_element(timestamp_element)
|
||||||
|
return timestamp_element.text
|
||||||
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def member_photo(self):
|
def member_photo(self):
|
||||||
class MemberPhoto(Button):
|
class MemberPhoto(Button):
|
||||||
|
|
Loading…
Reference in New Issue