45
45
DevicePostureProtocolPart ,
46
46
StorageProtocolPart ,
47
47
VirtualPressureSourceProtocolPart ,
48
+ WebExtensionsProtocolPart ,
48
49
merge_dicts )
49
50
50
51
from typing import List , Optional , Tuple
@@ -251,6 +252,23 @@ async def set_permission(self, descriptor, state, origin):
251
252
return await self .webdriver .bidi_session .permissions .set_permission (
252
253
descriptor = descriptor , state = state , origin = origin )
253
254
255
+ class WebDriverBidiWebExtensionsProtocolPart (WebExtensionsProtocolPart ):
256
+ def __init__ (self , parent ):
257
+ super ().__init__ (parent )
258
+ self .webdriver = None
259
+
260
+ def setup (self ):
261
+ self .webdriver = self .parent .webdriver
262
+
263
+ def load_web_extension (self , extension ):
264
+ if extension ["type" ] == "path" and self .parent .test_path :
265
+ extension_path = self .parent .test_path [:self .parent .test_path .rfind ('/' )]
266
+ extension ["path" ] = extension_path + extension .get ("path" )
267
+
268
+ return self .webdriver .loop .run_until_complete (self .webdriver .bidi_session .web_extension .install (extension ))
269
+
270
+ def unload_web_extension (self , extension_id ):
271
+ return self .webdriver .loop .run_until_complete (self .webdriver .bidi_session .web_extension .uninstall (extension_id ))
254
272
255
273
class WebDriverTestharnessProtocolPart (TestharnessProtocolPart ):
256
274
def setup (self ):
@@ -669,6 +687,20 @@ def update_virtual_pressure_source(self, source_type, sample):
669
687
def remove_virtual_pressure_source (self , source_type ):
670
688
return self .webdriver .send_session_command ("DELETE" , "pressuresource/%s" % source_type )
671
689
690
+ class WebDriverWebExtensionsProtocolPart (WebExtensionsProtocolPart ):
691
+ def setup (self ):
692
+ self .webdriver = self .parent .webdriver
693
+
694
+ def load_web_extension (self , extension ):
695
+ if extension ["type" ] == "path" and self .parent .test_path :
696
+ extension_path = self .parent .test_path [:self .parent .test_path .rfind ('/' )]
697
+ extension ["path" ] = extension_path + extension .get ("path" )
698
+
699
+ return self .webdriver .load_web_extension (extension )
700
+
701
+ def unload_web_extension (self , extension_id ):
702
+ return self .webdriver .unload_web_extension (extension_id )
703
+
672
704
673
705
class WebDriverProtocol (Protocol ):
674
706
enable_bidi = False
@@ -693,7 +725,8 @@ class WebDriverProtocol(Protocol):
693
725
WebDriverVirtualSensorPart ,
694
726
WebDriverDevicePostureProtocolPart ,
695
727
WebDriverStorageProtocolPart ,
696
- WebDriverVirtualPressureSourceProtocolPart ]
728
+ WebDriverVirtualPressureSourceProtocolPart ,
729
+ WebDriverWebExtensionsProtocolPart ]
697
730
698
731
def __init__ (self , executor , browser , capabilities , ** kwargs ):
699
732
super ().__init__ (executor , browser )
@@ -769,6 +802,7 @@ class WebDriverBidiProtocol(WebDriverProtocol):
769
802
WebDriverBidiEventsProtocolPart ,
770
803
WebDriverBidiPermissionsProtocolPart ,
771
804
WebDriverBidiScriptProtocolPart ,
805
+ WebDriverBidiWebExtensionsProtocolPart ,
772
806
* (part for part in WebDriverProtocol .implements )
773
807
]
774
808
@@ -975,6 +1009,7 @@ def on_environment_change(self, new_environment):
975
1009
976
1010
def do_test (self , test ):
977
1011
url = self .test_url (test )
1012
+ self .protocol .test_path = test .path
978
1013
979
1014
success , data = WebDriverRun (self .logger ,
980
1015
self .do_testharness ,
0 commit comments