Open irinamok opened 12 years ago
We might be able to work with chrome apps using webdriver's driver.switchTo().window("windowName"); API. We need to figure out how to get window handle, and how to start chrome app, and how to get window handle.
Some resources that might be use useful (haven't tested them myself):
--load-extension command line switch.
ChromeDriver Capabilities and Switches - We need to experiment with this and see if we can pass them as the desiredCapabilties
for /session
There are two ways to install Chrome extensions via webdriver:
Unpacked extensions Simply use the --load-extension command line switch and pass it the path to the root of the unpacked extension (not the CRX)
POST http://localhost:9515/session
{"desiredCapabilities":{
"browserName":"chrome",
"chrome.switches": ["--load-extension=/path/to/extension/root"]
}}
Extension packed as a CRX
Use chrome.extensions
capability and pass it the extension as a base64 encoded string. This example will actually install a small extension.
POST http://localhost:9515/session
{"desiredCapabilities":{"browserName":"chrome", "chrome.extensions": ["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"]}}
The advantage of using this method is that the extension id will always be the same and therefore we can launch the app with a url like chrome-extension://onnbccmmbdfiiedpahdpnombloiokjec/popup.html
PS: The following command will base64 encode the CRX and copy the output to the clipboard.
openssl base64 < /path/to/extension.crx | tr -d '\n' | pbcopy
I have run the test and confirmed that the above code installs it with the same extension id of onnbccmmbdfiiedpahdpnombloiokjec
I'm wondering if there isn't a better way to control the extension, but for now that should work.
In order to add this to screening, we will need to add some methods to load a chrome extension. Also, we need to figure out if it is possible to launch in a panel.
Screening should work with apps distributed as chrome extensions (like Ninja)