This is probably futile, but I'm wondering if anyone out there has experience doing this.
I'm trying to access a Silverlight application hosted within Google Chrome by using System.Windows.Automation (e.g., AutomationElement).
The problem I'm having is that Chrome hosts the Silverlight app within a child process. If I attempt to find the "Silverlight Control" AutomationElement (by using the main process' hWnd), it fails.
If I locate the Silverlight host child process, it does not have a window handle, and if I attempt to find the control using the child process' Handle it fails.
I know it's there... I can see it using Inspect
but I can only find this by clicking in the Silverlight app and navigating up in Inspect. I cannot navigate down from the tab window using AutomationElement.FindFirst or Inspect.
Its like there is a disconnect between the window and the Silverlight plugin that isn't seen in IE or Firefox, and I don't know how to get around it.
Has anybody else been able to do this?
I'm not sure if this helps or not in your instance but I've run into a couple instances where I needed to enable communication into Silverlight from outside (Office Application AddIns that need to communicate with the Silverlight Application). I've used javascript in the html page hosting the Silverlight Application as a bridge for that communication:
function sendToNav(message) {
var nav = document.getElementById("Nav");
nav.content.NavigationPage.HandleScriptedMessage(message);
}
function passMessageToHost(message) {
if (window.external == null) return;
window.external.HandleScriptedMessage(message);
}
If there any additional information I can provide please let me know. Hope this is of some use to you.
Related
Hi I could do with some help / more experienced eyes.
I have a WPF application which I have started automating some UI tests for using winappdriver, upon further investigation it has embeded html in it - webview, and can fire off requests to open the default browser with app related content - such as help files.
Has anyone had experience in working with this? For example:
open the WPF app,
click on help button on the WPF app which will open a browser and
then continue the test to ensure that the correct help page has been launched with the correct content in relation to the WPF page it was fired from.
Presumably this can be done in my case with chrome driver (winappdriver cannot see the content on the webpage). I have tried using selenium's window handles, but it's like the driver can't see the already open browser page. So I am at a bit of a loss and really not sure what to do.
In previous roles I was used to using Ranorex, which does both windows and web based UI automation. So I have never had any experience using multiple driver types to do the one test.
Cortana background apps provide deep linking capabilities, which allow the developer to link to a specific page within her app. I'm wondering if it's possible to open a different application instead, for example a web browser.
My current work-around is to deep-link into my app, and then call Windows.System.Launcher.launchUriAsync as soon as my app is launched. However, this means that the app opens along of the web browser. I would like it to not open at all! Is that possible?
From the MSDN page for LaunchUriAsync:
Unless you are calling this API from a Classic Windows application, this API must be called from within an ASTA thread (also known as a UI thread).
Unfortunately, Cortana's background task is not a UI thread. You're running as a background task, and communicating to Cortana's UI via a set of APIs provided for that purpose, which are limited by design.
Anything you try to do that requires you to be in the UI thread is going to fail for the same reason. You could try hosting the web control in your app however to remove the chain-launched browser from the equation.
Can I automate actions like filling and submitting a form, clicking links et.c. in a real browser (i.e. IE11 or Firefox) using only a Silverlight or an XBAP application?
I would be grateful if you could let me know any other solution (other than the two above) that can do the automations without the need to manually install third party software (like Selenium or Telerik Testing Framework).
No one answered, so I'll tell you what worked and what not.
Silverlight solutions didn't work due to the Same-origin browser policy.
The XBAP solution actually worked. I created a new XBAP application and loaded it in my other application inside an iframe.
The user must accept the pop-up and the XBAP application opens a new WebBrowser control doing its stuff.
The whole thing only supports IE.
There is a web page with a silverlight control, when we use browsers like IE, chrome etc, they are all working.
We develop a desktop program, embed a WebBrowser control to a win form, and navigate to the web page, the silverlight object is not initializing, only shows the silverlight logo, just like the silverlight has not yet installed, but actuall it has installed and working.
Is it the limitation for silverlight or there should be some kind of security settings in IE or the WebBrowser control?
I run silverlight in browsers as well as in a 'client' application (WPF, using a webbrowser type control). I can tell you in my project works without any issues, I've not had to change any settings apart from one - as I run it local host, IE prompts me about running in intranet mode.
You should use fiddler to see the exact URL that is being used in the navigation and to see if there are any errors returning from the web server.
I know it's not exact help, but I can confirm it should work. Hopefully that can help narrow your search a little.
I'm writing a Silverlight OOB application. Once the user has installed it, I would like the in-browser experience, on next visit, to just have a button to launch the OOB version. I know the API call to detect that it's installed, but I'm not sure to open my main Page control as or within a Window. Currently my in-browser view changes to say "Please launch from the installed shortcut" but that seems like it should be unnecessary. Is there a way to do this?
Thanks.
Unfortunately launching OOB app from the web page is not supported. This is commonly requested feature, but it looks like SL5 is not going to address it.