diff --git a/zulipterminal/core.py b/zulipterminal/core.py
index ddc7e89..1e11354 100644
--- a/zulipterminal/core.py
+++ b/zulipterminal/core.py
@@ -414,11 +414,14 @@ class Controller:
             # Suppress stdout and stderr when opening browser
             with suppress_output():
                 browser_controller.open(url)
+
+                # MacOS using Python version < 3.11 has no "name" attribute
+                # - https://github.com/python/cpython/issues/82828
+                # - https://github.com/python/cpython/issues/87590
+                # Use a default value if missing, for macOS, and potential later issues
+                browser_name = getattr(browser_controller, "name", "default browser")
                 self.report_success(
-                    [
-                        "The link was successfully opened using "
-                        f"{browser_controller.name}"
-                    ]
+                    [f"The link was successfully opened using {browser_name}"]
                 )
         except webbrowser.Error as e:
             # Set a footer text if no runnable browser is located

diff --git a/tests/core/test_core.py b/tests/core/test_core.py
index 033f126..be05d49 100644
--- a/tests/core/test_core.py
+++ b/tests/core/test_core.py
@@ -406,15 +406,24 @@ class TestController:
         assert popup.call_args_list[0][0][1] == "area:error"
 
     @pytest.mark.parametrize(
-        "url",
+        "url, webbrowser_name, expected_webbrowser_name",
         [
-            "https://chat.zulip.org/#narrow/stream/test",
-            "https://chat.zulip.org/user_uploads/sent/abcd/efg.png",
-            "https://github.com/",
+            ("https://chat.zulip.org/#narrow/stream/test", "chrome", "chrome"),
+            (
+                "https://chat.zulip.org/user_uploads/sent/abcd/efg.png",
+                "mozilla",
+                "mozilla",
+            ),
+            ("https://github.com/", None, "default browser"),
         ],
     )
     def test_open_in_browser_success(
-        self, mocker: MockerFixture, controller: Controller, url: str
+        self,
+        mocker: MockerFixture,
+        controller: Controller,
+        url: str,
+        webbrowser_name: Optional[str],
+        expected_webbrowser_name: str,
     ) -> None:
         # Set DISPLAY environ to be able to run test in CI
         os.environ["DISPLAY"] = ":0"
@@ -422,11 +431,16 @@ class TestController:
         mock_get = mocker.patch(MODULE + ".webbrowser.get")
         mock_open = mock_get.return_value.open
 
+        if webbrowser_name is None:
+            del mock_get.return_value.name
+        else:
+            mock_get.return_value.name = webbrowser_name
+
         controller.open_in_browser(url)
 
         mock_open.assert_called_once_with(url)
         mocked_report_success.assert_called_once_with(
-            [f"The link was successfully opened using {mock_get.return_value.name}"]
+            [f"The link was successfully opened using {expected_webbrowser_name}"]
         )
 
     def test_open_in_browser_fail__no_browser_controller(

ZT Crashes when viewing a message in browser in MacOS.
<img width="1031" alt="Screenshot 2024-02-15 at 9 44 55 PM" src="https://github.com/zulip/zulip-terminal/assets/71403193/deeadd45-decb-42f5-880c-30f709268a29">


ZT crashes when viewing a message in browser on MacOS.
My OS version = Ventura 13.6
Python version = 3.9

This might be a problem for other OS too. 

## Steps to replicate: 
1. Open ZT
2. Open message information popup
3. Select `open in web browser`
tests/core/test_core.py::TestController::test_open_in_browser_success[https://github.com/-None-default
tests/core/test_core.py::TestController::test_initialize_controller tests/core/test_core.py::TestController::test_initial_editor_mode tests/core/test_core.py::TestController::test_current_editor_error_if_no_editor tests/core/test_core.py::TestController::test_editor_mode_entered_from_initial tests/core/test_core.py::TestController::test_editor_mode_error_on_multiple_enter tests/core/test_core.py::TestController::test_editor_mode_exits_after_entering tests/core/test_core.py::TestController::test_narrow_to_stream tests/core/test_core.py::TestController::test_narrow_to_topic[all-messages_to_topic_narrow_no_anchor] tests/core/test_core.py::TestController::test_narrow_to_topic[topic_narrow_to_same_topic_narrow_with_anchor] tests/core/test_core.py::TestController::test_narrow_to_topic[topic_narrow_to_same_topic_narrow_with_other_anchor] tests/core/test_core.py::TestController::test_narrow_to_user tests/core/test_core.py::TestController::test_narrow_to_all_messages[None-537288] tests/core/test_core.py::TestController::test_narrow_to_all_messages[537286-537286] tests/core/test_core.py::TestController::test_narrow_to_all_messages[537288-537288] tests/core/test_core.py::TestController::test_narrow_to_all_pm tests/core/test_core.py::TestController::test_narrow_to_all_starred[index_all_starred0] tests/core/test_core.py::TestController::test_narrow_to_all_starred[index_all_starred1] tests/core/test_core.py::TestController::test_narrow_to_all_starred[index_all_starred2] tests/core/test_core.py::TestController::test_narrow_to_all_starred[index_all_starred3] tests/core/test_core.py::TestController::test_narrow_to_all_starred[index_all_starred4] tests/core/test_core.py::TestController::test_narrow_to_all_starred[index_all_starred5] tests/core/test_core.py::TestController::test_narrow_to_all_starred[index_all_starred6] tests/core/test_core.py::TestController::test_narrow_to_all_mentions[stream_mention__stream_wildcard] tests/core/test_core.py::TestController::test_narrow_to_all_mentions[stream+pm_mention__no_wildcard] tests/core/test_core.py::TestController::test_narrow_to_all_mentions[no_mention__stream+pm_wildcard] tests/core/test_core.py::TestController::test_narrow_to_all_mentions[stream+group_mention__pm_wildcard] tests/core/test_core.py::TestController::test_narrow_to_all_mentions[pm_mention__stream+group_wildcard] tests/core/test_core.py::TestController::test_narrow_to_all_mentions[group_mention__all_wildcard] tests/core/test_core.py::TestController::test_narrow_to_all_mentions[all_mention__stream_wildcard] tests/core/test_core.py::TestController::test_narrow_to_all_mentions[stream+group_mention__wildcard] tests/core/test_core.py::TestController::test_copy_to_clipboard_no_exception[copy tests/core/test_core.py::TestController::test_copy_to_clipboard_exception tests/core/test_core.py::TestController::test_open_in_browser_success[https://chat.zulip.org/#narrow/stream/test-chrome-chrome] tests/core/test_core.py::TestController::test_open_in_browser_success[https://chat.zulip.org/user_uploads/sent/abcd/efg.png-mozilla-mozilla] tests/core/test_core.py::TestController::test_open_in_browser_fail__no_browser_controller tests/core/test_core.py::TestController::test_main tests/core/test_core.py::TestController::test_stream_muting_confirmation_popup[muted_streams0-unmuting] tests/core/test_core.py::TestController::test_stream_muting_confirmation_popup[muted_streams1-muting] tests/core/test_core.py::TestController::test_search_message[msg_ids0-Default_all_msg_search] tests/core/test_core.py::TestController::test_search_message[msg_ids0-redo_default_search] tests/core/test_core.py::TestController::test_search_message[msg_ids0-search_within_stream] tests/core/test_core.py::TestController::test_search_message[msg_ids0-pm_search_again] tests/core/test_core.py::TestController::test_search_message[msg_ids0-search_within_topic_narrow] tests/core/test_core.py::TestController::test_search_message[msg_ids1-Default_all_msg_search] tests/core/test_core.py::TestController::test_search_message[msg_ids1-redo_default_search] tests/core/test_core.py::TestController::test_search_message[msg_ids1-search_within_stream] tests/core/test_core.py::TestController::test_search_message[msg_ids1-pm_search_again] tests/core/test_core.py::TestController::test_search_message[msg_ids1-search_within_topic_narrow] tests/core/test_core.py::TestController::test_search_message[msg_ids2-Default_all_msg_search] tests/core/test_core.py::TestController::test_search_message[msg_ids2-redo_default_search] tests/core/test_core.py::TestController::test_search_message[msg_ids2-search_within_stream] tests/core/test_core.py::TestController::test_search_message[msg_ids2-pm_search_again] tests/core/test_core.py::TestController::test_search_message[msg_ids2-search_within_topic_narrow] tests/core/test_core.py::TestController::test_maximum_popup_dimensions[above_linear_range] tests/core/test_core.py::TestController::test_maximum_popup_dimensions[in_linear_range] tests/core/test_core.py::TestController::test_maximum_popup_dimensions[below_linear_range] tests/core/test_core.py::TestController::test_show_typing_notification[in_pm_narrow_with_sender_typing:start] tests/core/test_core.py::TestController::test_show_typing_notification[in_pm_narrow_with_sender_typing:stop]