Прежде всего, вы действительно дублируете свой недавний вопрос.
Я часто использую WatiN, но для автоматизации браузера, а не для тестов, но я действительно не знаю, почему вы не можете использоватьWatiN в ваших тестах напрямую.Почему у вас не может быть тестового проекта с кодом WatiN?Кроме того, у меня действительно есть ощущение, что вам нужно больше изучать C #.Ранее вы уже говорили, что используете C # в течение нескольких дней.
В качестве ответа на ваш вопрос вы не можете иметь ссылку на объекты, созданные вами в отдельных процессах (.NET - в отдельном домене приложений).).Вы не можете сделать что-то, как вы хотели сделать в своем предыдущем вопросе , то есть:
System.Diagnostics.Process Proc = new System.Diagnostics.Process();
Proc.StartInfo.FileName = "path_to_exe\\winformWithWebBrowserTest.exe";
Proc.Start();
WindowsFormsApplication1.Form1 form1 = new Form1();
С этим кодом вы находитесь в процессе A:
- Запуск процесса B.
- Создание объекта типа
Form1
в процессе A.
Нет связи, связи или чего-либо еще между процессами A и B. Вы можете 't просто создайте объект или вызовите метод или что-то еще в процессе A, который живет в проекте B. Если вам нужно это сделать, вам нужно поискать в Google «межпроцессное взаимодействие в C #».В эти дни вы можете добавить "WCF" к вашим критериям поиска.Например, посмотрите на этот вопрос: Межпроцессное взаимодействие для Windows в C # (.NET 2.0) или Каков наилучший выбор для межпроцессного взаимодействия .NET? .Но на самом деле все не так просто, как вы хотите.По сути, это все равно что сделать процесс B сервером / хостом, а процесс A - клиентом.
РЕДАКТИРОВАТЬ после комментария OP
Если вы хотите автоматизировать только управление через веб-браузер, этоможно сделать с небольшим усилием.Вы можете попробовать что-то вроде этого:
var p = Process.Start(@"path_to_exe");
Thread.Sleep(1000); //Need to wait a while for that process to start,
//and web browser control to initialize
//Use IEUtils from WatiN library
//We need to find a handle to window containing web browser control
//Maybe you will have to do some other stuff to find that window and I can't
//guarantee this will work instantly, because internally this method is enumerating
//controls on form to find web browser control
var htmlDocument = IEUtils.IEDOMFromhWnd(p.MainWindowHandle);
//Copy from WatiN class - ShellWindows2
var SID_SWebBrowserApp = new Guid(0x0002DF05, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
var serviceProvider = htmlDocument as WatiN.Core.Native.Windows.IServiceProvider;
object objIWebBrowser;
var guidIWebBrowser = typeof(IWebBrowser2).GUID;
serviceProvider.QueryService(ref SID_SWebBrowserApp, ref guidIWebBrowser, out objIWebBrowser);
//Stopping dialog watcher is essential
Settings.AutoStartDialogWatcher = false;
var ie = new IE(objIWebBrowser);
ie.GoTo(@"http://www.google.com");
Если вам нужно использовать диалоговое средство просмотра, вы можете переписать код из моего ответа на другой вопрос .