1515 NotAnIFrame ,
1616 InvalidFileExtension ,
1717 WaitElementTimeout ,
18+ NetworkEventsNotEnabled ,
1819)
19- from pydoll .commands import (
20- DomCommands ,
21- RuntimeCommands ,
22- NetworkCommands ,
23- StorageCommands ,
24- PageCommands ,
25- FetchCommands ,
26- )
27- from pydoll .protocol .page .events import PageEvent
28-
2920
3021@pytest_asyncio .fixture
3122async def mock_connection_handler ():
@@ -945,8 +936,173 @@ async def test_network_logs_property(self, tab):
945936 @pytest .mark .asyncio
946937 async def test_dialog_property (self , tab ):
947938 """Test dialog property access."""
948- test_dialog = {'params' : { ' type' : 'alert' , 'message' : 'Test' } }
939+ test_dialog = {'type' : 'alert' , 'message' : 'Test message' }
949940 tab ._connection_handler .dialog = test_dialog
950941
951942 dialog = tab ._connection_handler .dialog
952- assert dialog == test_dialog
943+ assert dialog == test_dialog
944+
945+
946+ class TestTabNetworkMethods :
947+ """Test Tab network-related methods."""
948+
949+ @pytest .mark .asyncio
950+ async def test_get_network_response_body_success (self , tab ):
951+ """Test get_network_response_body with network events enabled."""
952+ # Enable network events
953+ tab ._network_events_enabled = True
954+
955+ # Mock the response
956+ expected_body = '<html><body>Response content</body></html>'
957+ tab ._connection_handler .execute_command .return_value = {
958+ 'result' : {'body' : expected_body }
959+ }
960+
961+ result = await tab .get_network_response_body ('test_request_123' )
962+
963+ assert result == expected_body
964+ tab ._connection_handler .execute_command .assert_called_once ()
965+
966+ @pytest .mark .asyncio
967+ async def test_get_network_response_body_events_not_enabled (self , tab ):
968+ """Test get_network_response_body when network events are not enabled."""
969+ # Ensure network events are disabled
970+ tab ._network_events_enabled = False
971+
972+ with pytest .raises (NetworkEventsNotEnabled ) as exc_info :
973+ await tab .get_network_response_body ('test_request_123' )
974+
975+ assert str (exc_info .value ) == 'Network events must be enabled to get response body'
976+ tab ._connection_handler .execute_command .assert_not_called ()
977+
978+ @pytest .mark .asyncio
979+ async def test_get_network_logs_success_no_filter (self , tab ):
980+ """Test get_network_logs without filter."""
981+ # Enable network events
982+ tab ._network_events_enabled = True
983+
984+ # Mock network logs
985+ test_logs = [
986+ {
987+ 'method' : 'Network.requestWillBeSent' ,
988+ 'params' : {
989+ 'request' : {'url' : 'https://example.com/api/data' },
990+ 'requestId' : 'req_1'
991+ }
992+ },
993+ {
994+ 'method' : 'Network.responseReceived' ,
995+ 'params' : {
996+ 'request' : {'url' : 'https://example.com/static/style.css' },
997+ 'requestId' : 'req_2'
998+ }
999+ }
1000+ ]
1001+ tab ._connection_handler .network_logs = test_logs
1002+
1003+ result = await tab .get_network_logs ()
1004+
1005+ assert result == test_logs
1006+ assert len (result ) == 2
1007+
1008+ @pytest .mark .asyncio
1009+ async def test_get_network_logs_success_with_filter (self , tab ):
1010+ """Test get_network_logs with URL filter."""
1011+ # Enable network events
1012+ tab ._network_events_enabled = True
1013+
1014+ # Mock network logs
1015+ test_logs = [
1016+ {
1017+ 'method' : 'Network.requestWillBeSent' ,
1018+ 'params' : {
1019+ 'request' : {'url' : 'https://example.com/api/data' },
1020+ 'requestId' : 'req_1'
1021+ }
1022+ },
1023+ {
1024+ 'method' : 'Network.responseReceived' ,
1025+ 'params' : {
1026+ 'request' : {'url' : 'https://example.com/static/style.css' },
1027+ 'requestId' : 'req_2'
1028+ }
1029+ },
1030+ {
1031+ 'method' : 'Network.requestWillBeSent' ,
1032+ 'params' : {
1033+ 'request' : {'url' : 'https://api.example.com/users' },
1034+ 'requestId' : 'req_3'
1035+ }
1036+ }
1037+ ]
1038+ tab ._connection_handler .network_logs = test_logs
1039+
1040+ result = await tab .get_network_logs (filter = 'api' )
1041+
1042+ # Should return only logs with 'api' in the URL
1043+ assert len (result ) == 2
1044+ assert result [0 ]['params' ]['request' ]['url' ] == 'https://example.com/api/data'
1045+ assert result [1 ]['params' ]['request' ]['url' ] == 'https://api.example.com/users'
1046+
1047+ @pytest .mark .asyncio
1048+ async def test_get_network_logs_empty_filter_result (self , tab ):
1049+ """Test get_network_logs with filter that matches no logs."""
1050+ # Enable network events
1051+ tab ._network_events_enabled = True
1052+
1053+ # Mock network logs
1054+ test_logs = [
1055+ {
1056+ 'method' : 'Network.requestWillBeSent' ,
1057+ 'params' : {
1058+ 'request' : {'url' : 'https://example.com/static/style.css' },
1059+ 'requestId' : 'req_1'
1060+ }
1061+ }
1062+ ]
1063+ tab ._connection_handler .network_logs = test_logs
1064+
1065+ result = await tab .get_network_logs (filter = 'nonexistent' )
1066+
1067+ assert result == []
1068+
1069+ @pytest .mark .asyncio
1070+ async def test_get_network_logs_events_not_enabled (self , tab ):
1071+ """Test get_network_logs when network events are not enabled."""
1072+ # Ensure network events are disabled
1073+ tab ._network_events_enabled = False
1074+
1075+ with pytest .raises (NetworkEventsNotEnabled ) as exc_info :
1076+ await tab .get_network_logs ()
1077+
1078+ assert str (exc_info .value ) == 'Network events must be enabled to get network logs'
1079+
1080+ @pytest .mark .asyncio
1081+ async def test_get_network_logs_missing_request_params (self , tab ):
1082+ """Test get_network_logs with logs missing request parameters."""
1083+ # Enable network events
1084+ tab ._network_events_enabled = True
1085+
1086+ # Mock network logs with missing request data
1087+ test_logs = [
1088+ {
1089+ 'method' : 'Network.requestWillBeSent' ,
1090+ 'params' : {
1091+ 'requestId' : 'req_1'
1092+ # Missing 'request' key
1093+ }
1094+ },
1095+ {
1096+ 'method' : 'Network.responseReceived' ,
1097+ 'params' : {
1098+ 'request' : {}, # Empty request object
1099+ 'requestId' : 'req_2'
1100+ }
1101+ }
1102+ ]
1103+ tab ._connection_handler .network_logs = test_logs
1104+
1105+ result = await tab .get_network_logs (filter = 'example' )
1106+
1107+ # Should handle missing request data gracefully
1108+ assert result == []
0 commit comments