Определить, появляется ли в браузере диалоговое окно с открытым файлом - PullRequest
1 голос
/ 10 ноября 2019

Я автоматизирую загрузку файлов с помощью C # и селена (работает под управлением Google Chrome), но я не хочу вводить путь к файлу при вводе файла, я хотел бы эмулировать, как это будет делать реальный пользователь (набираяпуть в диалоговом окне файла). Использование метода SendKeys.SendWait () является идеальным решением для этого, однако я столкнулся с проблемой.

У меня есть следующий код.

var e = driverWait.Until(driver => driver.FindElement(By.Id("file-button")));
e.Click();
SendKeys.SendWait(@"C:\Users\seawolf\Downloads\Result.pdf");

Проблема до открытия файлаПоявится диалоговое окно, SendWait начинает печатать на клавиатуре, поэтому путь вводится на веб-странице, а не в диалоговом окне.

Есть ли способ, пока не откроется диалог открытия файла с C #? Его не нужно встраивать в селен, так как все легко интегрировать с driverWait. Я хочу сделать что-то вроде:

driverWait.Until(_ => DialogIsOpen() );

Спасибо @Jimi, вот мое решение.

var chromeElement = AutomationElement.RootElement.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.ClassNameProperty, "Chrome_WidgetWin_1"));
var openDialogClassName = "#32770";
Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent, chromeElement, TreeScope.Subtree, (sender, _) =>
    {
    var element = sender as AutomationElement;
    Console.WriteLine("running");
    if (element.Current.ClassName.Equals(openDialogClassName))
    {
        SendKeys.SendWait(@"C:\Users\seawolf\Downloads\Result.pdf");
    }
});
...