status-mobile icon indicating copy to clipboard operation
status-mobile copied to clipboard

Better error handling for wallet transactions + handling of missing signals

Open alwx opened this issue 9 months ago • 14 comments

Potentially fixes #21735 Fixes #21473 Also improves and simplifies error handling which is required for https://github.com/status-im/status-mobile/issues/22046 as well

Summary

This PR adds missing handing of missing signals and updates processing of a couple of existing signals:

  • wallet.router.sending-transactions-started (new)
  • wallet.router.transactions-sent
  • wallet.transaction.status-changed (new)

In addition to that, error processing has been simplified and unified with status-desktop — basically all the logic in :wallet/show-transaction-notification is there to match the logic here: https://github.com/status-im/status-desktop/blob/master/src/app/modules/main/module.nim#L445

Potential next steps (to be discussed)

status-desktop goes further and use the same function to display all kinds of transaction-related notifications. Do we do more informative toasts? Do we need to duplicate the logic of indication how the transaction is moving forward?

Functional

  • wallet

status: ready

alwx avatar Feb 24 '25 08:02 alwx

Jenkins Builds

Click to see older builds (39)
:grey_question: Commit :hash: Finished (UTC) Duration Platform Result
:x: 6f5a053a #1 2025-02-24 08:33:16 ~3 min tests :page_facing_up:log
:heavy_check_mark: 6f5a053a #1 2025-02-24 08:39:53 ~9 min android :robot:apk :calling:
:heavy_check_mark: 6f5a053a #1 2025-02-24 08:40:37 ~10 min ios :iphone:ipa :calling:
:x: 358b35ca #2 2025-02-24 10:15:12 ~2 min tests :page_facing_up:log
:heavy_check_mark: 358b35ca #2 2025-02-24 10:20:28 ~7 min android-e2e :robot:apk :calling:
:heavy_check_mark: 358b35ca #2 2025-02-24 10:21:19 ~8 min android :robot:apk :calling:
:heavy_check_mark: 358b35ca #2 2025-02-24 10:22:08 ~9 min ios :iphone:ipa :calling:
:x: 443e88b0 #3 2025-02-24 18:30:49 ~3 min tests :page_facing_up:log
:heavy_check_mark: 443e88b0 #3 2025-02-24 18:35:25 ~8 min android-e2e :robot:apk :calling:
:heavy_check_mark: 443e88b0 #3 2025-02-24 18:35:56 ~8 min android :robot:apk :calling:
:heavy_check_mark: 443e88b0 #3 2025-02-24 18:37:03 ~9 min ios :iphone:ipa :calling:
:x: 7d8041af #4 2025-02-24 20:42:00 ~2 min tests :page_facing_up:log
:heavy_check_mark: 7d8041af #4 2025-02-24 20:46:12 ~6 min android-e2e :robot:apk :calling:
:heavy_check_mark: 7d8041af #4 2025-02-24 20:47:36 ~8 min android :robot:apk :calling:
:heavy_check_mark: 7d8041af #4 2025-02-24 20:51:43 ~12 min ios :iphone:ipa :calling:
:x: b517215f #6 2025-03-03 08:35:37 ~2 min tests :page_facing_up:log
:x: ac07213b #7 2025-03-03 08:39:34 ~3 min tests :page_facing_up:log
:x: 95670336 #8 2025-03-03 08:44:35 ~2 min tests :page_facing_up:log
:heavy_check_mark: 95670336 #8 2025-03-03 08:49:14 ~7 min android :robot:apk :calling:
:heavy_check_mark: 95670336 #8 2025-03-03 08:49:50 ~7 min android-e2e :robot:apk :calling:
:heavy_check_mark: 95670336 #8 2025-03-03 08:52:14 ~10 min ios :iphone:ipa :calling:
:x: 263fc45f #9 2025-04-08 20:09:36 ~4 min tests :page_facing_up:log
:heavy_check_mark: 263fc45f #9 2025-04-08 20:13:24 ~8 min android-e2e :robot:apk :calling:
:heavy_check_mark: 263fc45f #9 2025-04-08 20:15:17 ~10 min android :robot:apk :calling:
:heavy_check_mark: 263fc45f #9 2025-04-08 20:17:17 ~12 min ios :iphone:ipa :calling:
:x: ff65daf5 #10 2025-04-10 12:17:02 ~3 min tests :page_facing_up:log
:x: 73ecaf1b #11 2025-04-10 12:24:17 ~2 min tests :page_facing_up:log
:x: 99484800 #12 2025-04-10 12:32:29 ~3 min tests :page_facing_up:log
:heavy_check_mark: 99484800 #12 2025-04-10 12:38:14 ~9 min android-e2e :robot:apk :calling:
:heavy_check_mark: 99484800 #12 2025-04-10 12:38:48 ~9 min android :robot:apk :calling:
:heavy_check_mark: 99484800 #12 2025-04-10 12:39:11 ~9 min ios :iphone:ipa :calling:
:heavy_check_mark: 320d0164 #13 2025-04-10 16:12:41 ~5 min tests :page_facing_up:log
:heavy_check_mark: 320d0164 #13 2025-04-10 16:16:35 ~9 min android-e2e :robot:apk :calling:
:heavy_check_mark: 320d0164 #13 2025-04-10 16:17:09 ~9 min ios :iphone:ipa :calling:
:heavy_check_mark: 320d0164 #13 2025-04-10 16:17:18 ~9 min android :robot:apk :calling:
:heavy_check_mark: 8a06a6d5 #14 2025-04-11 07:09:37 ~4 min tests :page_facing_up:log
:heavy_check_mark: 8a06a6d5 #14 2025-04-11 07:13:10 ~8 min android-e2e :robot:apk :calling:
:heavy_check_mark: 8a06a6d5 #14 2025-04-11 07:13:43 ~8 min android :robot:apk :calling:
:heavy_check_mark: 8a06a6d5 #14 2025-04-11 07:15:26 ~10 min ios :iphone:ipa :calling:
:grey_question: Commit :hash: Finished (UTC) Duration Platform Result
:heavy_check_mark: f7410e92 #15 2025-04-15 13:24:52 ~6 min tests :page_facing_up:log
:heavy_check_mark: f7410e92 #15 2025-04-15 13:27:19 ~9 min android-e2e :robot:apk :calling:
:heavy_check_mark: f7410e92 #15 2025-04-15 13:28:26 ~10 min android :robot:apk :calling:
:heavy_check_mark: f7410e92 #15 2025-04-15 13:35:55 ~17 min ios :iphone:ipa :calling:
:x: f0e5a6cf #16 2025-05-19 08:29:42 ~3 min tests :page_facing_up:log
:heavy_check_mark: f0e5a6cf #16 2025-05-19 08:34:21 ~7 min android-e2e :robot:apk :calling:
:heavy_check_mark: f0e5a6cf #16 2025-05-19 08:35:30 ~9 min android :robot:apk :calling:
:heavy_check_mark: f0e5a6cf #16 2025-05-19 08:38:04 ~11 min ios :iphone:ipa :calling:

status-im-auto avatar Feb 24 '25 08:02 status-im-auto

@alwx please, move PR to E2E column once conflicts and review comments are resolved. thanks!

churik avatar Mar 10 '25 13:03 churik

сс @alwx - pinging for visibility, seems this Pr is here for awhile, may we take actions to move it forward?

Thanks!

churik avatar Apr 07 '25 08:04 churik

@churik sure, just other things were more important. Updating it today.

alwx avatar Apr 07 '25 09:04 alwx

Moving it to E2E tests column (finally)

alwx avatar Apr 10 '25 12:04 alwx

@alwx thank for the PR. Is it ready for testing? If, yes could you please add request-manual-qa label + rebase PR to the latest develop.

Also, I see tests build is failing. Could you take a look at this as well please?

Thank you.

pavloburykh avatar Apr 10 '25 12:04 pavloburykh

61% of end-end tests have passed

Total executed tests: 23
Failed tests: 9
Expected to fail tests: 0
Passed tests: 14
IDs of failed tests: 727229,741840,727230,740490,741612,741554,742015,741841,742016 

Failed tests (9)

Click to expand
  • Rerun failed tests

  • Class TestWalletOneDevice:

    1. test_wallet_balance_mainnet, id: 740490

    Device 1: Tap on found: Button
    Device 1: Find `Button` by `accessibility id`: `Base, NEW, label-component`
    wallet/test_wallet_mainnet_no_send.py:60: in test_wallet_balance_mainnet
        self.wallet_view.set_network_in_wallet(network)
    ../views/wallet_view.py:236: in set_network_in_wallet
        element.click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: Button by accessibility id: `Base, NEW, label-component` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
    



    Device sessions

    2. test_wallet_bridge_flow_mainnet, id: 741612

    Device 1: Find SlideButton by xpath: //*[@resource-id='slide-button-track']
    Device 1: Click system back button
    wallet/test_wallet_mainnet_no_send.py:349: in test_wallet_bridge_flow_mainnet
        self.errors.verify_no_errors()
    base_test_case.py:205: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Device 1: Optimism to Arbitrum: Est. time has incorrect value -  min on the Review Bridge screen
    E    Device 1: Arbitrum to Base: Est. time has incorrect value -  min on the Review Bridge screen
    E    Device 1: Base to Optimism: Est. time has incorrect value -  min on the Review Bridge screen
    



    Device sessions

    3. test_wallet_send_flow_mainnet, id: 741554

    Device 1: Tap on found: Button
    Device 1: Find EditBox by accessibility id: address-text-input
    wallet/test_wallet_mainnet_no_send.py:76: in test_wallet_send_flow_mainnet
        self.wallet_view.address_text_input.send_keys(self.receiver['wallet_address'])
    ../views/base_element.py:380: in send_keys
        self.find_element().send_keys(value)
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: EditBox by accessibility id: `address-text-input` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
    



    Device sessions

    Class TestWalletMultipleDevice:

    1. test_send_eth[Status Network Sepolia-0.0002], id: 727229

    # STEP: Sending funds from wallet on Status Network Sepolia
    Device 1: Find Button by xpath: //android.view.ViewGroup[contains(@content-desc,'Account 1')]
    wallet_txs/test_wallet_testnet.py:45: in test_send_eth
        self.wallet_1.get_account_element().click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: Button by xpath: `//android.view.ViewGroup[contains(@content-desc,'Account 1')]` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
    



    Device sessions

    2. test_wallet_send_erc20_from_drawer[Optimism Sepolia-USD Coin-USDC-2-0.01], id: 727230

    Device 1: Double tap on: Button
    Device 1: Find Button by xpath: //*[@content-desc='send']/*[@content-desc='left-icon-for-action']
    wallet_txs/test_wallet_testnet.py:81: in test_wallet_send_erc20_from_drawer
        self.wallet_1.send_asset_from_drawer(address=self.receiver['wallet_address'],
    ../views/wallet_view.py:289: in send_asset_from_drawer
        self.send_from_drawer_button.double_click()
    ../views/base_element.py:114: in double_click
        [self.find_element().click() for _ in range(2)]
    ../views/base_element.py:114: in <listcomp>
        [self.find_element().click() for _ in range(2)]
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: Button by xpath: `//*[@content-desc='send']/*[@content-desc='left-icon-for-action']` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
    



    Device sessions

    3. test_send_eth[Arbitrum Sepolia-0.0001], id: 742015

    Device 1: Tap on found: Button
    Device 1: Find Button by xpath: //*[@content-desc='network-list']/*[@text='Arbitrum Sepolia']
    wallet_txs/test_wallet_testnet.py:46: in test_send_eth
        self.wallet_1.send_asset(address=self.receiver['wallet_address'],
    ../views/wallet_view.py:282: in send_asset
        self.select_network(network_name)
    ../views/wallet_view.py:257: in select_network
        xpath="//*[@content-desc='network-list']/*[@text='%s']" % network_name).click()
    ../views/base_element.py:90: in click
        element = self.find_element()
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: Button by xpath: `//*[@content-desc='network-list']/*[@text='Arbitrum Sepolia']` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
    



    Device sessions

    4. test_wallet_send_erc20_from_drawer[Sepolia-USD Coin-USDC-2-0.01], id: 742016

    Device 1: Double tap on: Button
    Device 1: Find Button by xpath: //*[@content-desc='send']/*[@content-desc='left-icon-for-action']
    wallet_txs/test_wallet_testnet.py:81: in test_wallet_send_erc20_from_drawer
        self.wallet_1.send_asset_from_drawer(address=self.receiver['wallet_address'],
    ../views/wallet_view.py:289: in send_asset_from_drawer
        self.send_from_drawer_button.double_click()
    ../views/base_element.py:114: in double_click
        [self.find_element().click() for _ in range(2)]
    ../views/base_element.py:114: in <listcomp>
        [self.find_element().click() for _ in range(2)]
    ../views/base_element.py:79: in find_element
        raise NoSuchElementException(
     Device 1: Button by xpath: `//*[@content-desc='send']/*[@content-desc='left-icon-for-action']` is not found on the screen; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#no-such-element-exception
    



    Device sessions

    Class TestWalletCollectibles:

    1. test_wallet_send_collectible, id: 741840

    Device 1: Find SlideButton by xpath: //*[@resource-id='slide-button-track']
    Device 1: Click system back button
    wallet/test_collectibles.py:154: in test_wallet_send_collectible
        self.errors.verify_no_errors()
    base_test_case.py:205: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Device 1: Unexpected value ' min' is shown for est. time on the Review Send page
    



    Device sessions

    2. test_wallet_collectible_send_from_expanded_info_view, id: 741841

    Device 1: Swiping right on element SlideButton
    Device 1: Find SlideButton by xpath: //*[@resource-id='slide-button-track']
    wallet/test_collectibles.py:206: in test_wallet_collectible_send_from_expanded_info_view
        self.errors.verify_no_errors()
    base_test_case.py:205: in verify_no_errors
        pytest.fail('\n '.join([self.errors.pop(0) for _ in range(len(self.errors))]))
     Device 1: Unexpected value ' min' is shown for est. time on the Review Send page
    



    Device sessions

    Passed tests (14)

    Click to expand

    Class TestGroupChatMultipleDeviceMergedNewUI:

    1. test_group_chat_join_send_text_messages_push, id: 702807
    Device sessions

    Class TestProfileMultipleDevices:

    1. test_profile_change_profile_photo, id: 741969
    Device sessions

    2. test_profile_change_username, id: 741968
    Device sessions

    Class TestOneToOneChatMultipleSharedDevicesNewUi:

    1. test_1_1_chat_send_image_save_and_share, id: 703391
    Device sessions

    2. test_1_1_chat_pin_messages, id: 702731
    Device sessions

    3. test_1_1_chat_message_reaction, id: 702730
    Device sessions

    Class TestCommunityOneDeviceMerged:

    1. test_community_copy_and_paste_message_in_chat_input, id: 702742
    Device sessions

    Class TestWalletCollectibles:

    1. test_wallet_collectibles_balance, id: 741839
    Device sessions

    Class TestCommunityMultipleDeviceMerged:

    1. test_community_message_delete, id: 702839
    Device sessions

    2. test_community_message_send_check_timestamps_sender_username, id: 702838
    Device sessions

    3. test_community_one_image_send_reply_set_reaction, id: 702859
    Device sessions

    4. test_community_message_edit, id: 702843
    Device sessions

    Class TestWalletOneDeviceTwo:

    1. test_wallet_add_remove_regular_account, id: 727231
    Device sessions

    Class TestWalletOneDevice:

    1. test_wallet_swap_flow_mainnet, id: 741555
    Device sessions

    status-im-auto avatar Apr 10 '25 12:04 status-im-auto

    @alwx could you please expand on how exactly this issue https://github.com/status-im/status-mobile/issues/21473 is fixed, what is the expected result?

    User should not face the described error anymore OR this error is handled in some other way?

    Same question about https://github.com/status-im/status-mobile/issues/21735 : do you expect that user should not face Route not built randomly problem anymore OR we should show some specific error when routes are not build?

    pavloburykh avatar Apr 10 '25 12:04 pavloburykh

    @pavloburykh the thing is when working with external providers we cannot really guarantee that things work 100% of times — sometimes the provider might be unavailable, sometimes you might reach the request limit, etc etc.

    But #21473 must be gone, and the whole error handling process was updated so that the errors you might be getting in the process should match those you see on desktop. When it comes to route not being built randomly — it might still happen and there is no way around that (see the beginning of my explanation) but at least you should be able to see the clear reason in logs and the better error description in this case.

    alwx avatar Apr 11 '25 08:04 alwx

    78% of end-end tests have passed

    Total executed tests: 9
    Failed tests: 2
    Expected to fail tests: 0
    Passed tests: 7
    
    IDs of failed tests: 741840,741841 
    

    Failed tests (2)

    Click to expand
  • Rerun failed tests

  • Class TestWalletCollectibles:

    1. test_wallet_send_collectible, id: 741840

    Device 1: Tap on found: WalletTab
    Device 1: Find `Button` by `xpath`: `//android.view.ViewGroup[contains(@content-desc,'Account 1')]`
    wallet/test_collectibles.py:103: in test_wallet_send_collectible
        self.wallet_view.get_account_element().click()
    ../views/base_element.py:92: in click
        element.click()
    ../../../../status-app-prs-rerun@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webelement.py:94: in click
        self._execute(Command.CLICK_ELEMENT)
    ../../../../status-app-prs-rerun@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webelement.py:395: in _execute
        return self._parent.execute(command, params)
    ../../../../status-app-prs-rerun@tmp/venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:345: in execute
        self.error_handler.check_response(response)
    ../../../../status-app-prs-rerun@tmp/venv/lib/python3.10/site-packages/appium/webdriver/errorhandler.py:122: in check_response
        raise exception_class(msg=message, stacktrace=format_stacktrace(stacktrace))
     The element 'By.xpath: //android.view.ViewGroup[contains(@content-desc,'Account 1')]' is not linked to the same object in DOM anymore; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors#stale-element-reference-exception
    E   Stacktrace:
    E   io.appium.uiautomator2.common.exceptions.StaleElementReferenceException: The element 'By.xpath: //android.view.ViewGroup[contains(@content-desc,'Account 1')]' is not linked to the same object in DOM anymore
    E   	at io.appium.uiautomator2.model.ElementsCache.restore(ElementsCache.java:122)
    E   	at io.appium.uiautomator2.model.ElementsCache.get(ElementsCache.java:153)
    E   	at io.appium.uiautomator2.handler.Click.safeHandle(Click.java:36)
    E   	at io.appium.uiautomator2.handler.request.SafeRequestHandler.handle(SafeRequestHandler.java:59)
    E   	at io.appium.uiautomator2.server.AppiumServlet.handleRequest(AppiumServlet.java:277)
    E   	at io.appium.uiautomator2.server.AppiumServlet.handleHttpRequest(AppiumServlet.java:271)
    E   	at io.appium.uiautomator2.http.ServerHandler.channelRead(ServerHandler.java:77)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:435)
    E   	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293)
    E   	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267)
    E   	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:250)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:266)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:345)
    E   	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1294)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:366)
    E   	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:352)
    E   	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:911)
    E   	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:611)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:552)
    E   	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:466)
    E   	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:438)
    E   	at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:140)
    E   	at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144)
    E   	at java.lang.Thread.run(Thread.java:1012)
    



    Device sessions

    2. test_wallet_collectible_send_from_expanded_info_view, id: 741841

    Device 1: Find Button by accessibility id: collectibles-tab
    Device 1: Tap on found: Button
    wallet/test_collectibles.py:159: in test_wallet_collectible_send_from_expanded_info_view
        self.wallet_view.get_collectible_element('Glitch Punks').wait_for_element().click()
    ../views/base_element.py:121: in wait_for_element
        raise TimeoutException(
     Device `1`: `CollectibleItemElement` by` xpath`: `//*[@content-desc='collectible-list-item']//*[contains(@text,'Glitch Punks')]/../..` is not found on the screen after wait_for_element
    



    Device sessions

    Passed tests (7)

    Click to expand

    Class TestWalletOneDevice:

    1. test_wallet_balance_mainnet, id: 740490
    Device sessions

    2. test_wallet_bridge_flow_mainnet, id: 741612
    Device sessions

    3. test_wallet_send_flow_mainnet, id: 741554
    Device sessions

    Class TestWalletMultipleDevice:

    1. test_wallet_send_erc20_from_drawer[Sepolia-USD Coin-USDC-2-0.01], id: 742016
    Device sessions

    2. test_send_eth[Arbitrum Sepolia-0.0001], id: 742015
    Device sessions

    3. test_send_eth[Status Network Sepolia-0.0002], id: 727229
    Device sessions

    4. test_wallet_send_erc20_from_drawer[Optimism Sepolia-USD Coin-USDC-2-0.01], id: 727230
    Device sessions

    status-im-auto avatar Apr 11 '25 09:04 status-im-auto

    hi @alwx Thank you for PR. Take a look, this issue still exists

    PR_ISSUE 1: Unclear validation messages are shown for unsupported assets for Base on bridge

    Steps:

    1. Attempt to bridge a non-supported token.
    2. Try the following bridge actions:
    • Bridge FROM Base.
    • Bridge TO Base.

    Actual result:

    The validation toast is not clear on the bridge if a non-supported token is used: "Not available for chainID" is displayed when attempting to bridge FROM Base. image

    Expected result:

    Clear and user-friendly validation messages should be displayed, such as: "Bridging from Base is not supported for this token." "Bridging to Base is not supported for this token.

    https://www.figma.com/design/xLs1KYmF4e6WwRTZVJKeUK/Wallet?node-id=10232-108495&t=sVvADfGe0WsbBGA4-1 discussing in https://discord.com/channels/1210237582470807632/1274068685266489434/1335942271274713109

    Devices:

    • Pixel 7a, Android 15
    • iPhone 11 Pro Max, IOS 17

    VolodLytvynenko avatar Apr 11 '25 11:04 VolodLytvynenko

    @VolodLytvynenko regarding ISSUE 1: I am not sure we expect this issue https://github.com/status-im/status-mobile/issues/22012 to be fixed by current PR. I do not see this issue in the PR description. Why do you assume it should be fixed? Anyway, @alwx can provide more clarification on this.

    pavloburykh avatar Apr 11 '25 14:04 pavloburykh

    Also improves and simplifies error handling which is required for #22046 as well

    Hi @alwx, I noticed this in the description of the current PR. Could you confirm if this is an issue that should be fixed in scope of this PR? I understood it to be so

    VolodLytvynenko avatar Apr 11 '25 14:04 VolodLytvynenko

    I'm surprised to see this issue in the current PR, as I was sure it wasn’t related to it. However, I'm unable to reproduce it in the latest development, but I can consistently reproduce it on 2 devices across different networks. Could you please take a look

    PR_ISSUE 2: Approval transaction is shown before bridge transaction in activity tab

    Steps to reproduce:

    1. Perform a bridge transaction using an ERC-20 asset.
    2. Open the Activity tab and observe the order of displayed transactions.

    Actual result:

    The Approval transaction appears first (at the top). The Bridge transaction appears below the approval transaction. image

    Expected result:

    The Bridge transaction should be shown first at the top as within blockchain image

    OS:

    IOS, Android

    Devices:

    • Pixel 7a, Android 15
    • iPhone 11 Pro Max, IOS 17

    Logs

    https://drive.google.com/file/d/1eOgxGMnxgljP7VlXI636mPszvZJ5b0xv/view?usp=drive_link

    VolodLytvynenko avatar Apr 11 '25 16:04 VolodLytvynenko