Я автоматизирую загрузку файлов с помощью 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");
}
});