C# Selenium:如何单击 Sharepoint 文件夹上传对话框中不在 DOM 中的接受按钮

C# Selenium: How to click Accept button that is not in the DOM in a Sharepoint Folder Upload dialogue box

我搜索了 Whosebug,但找不到以下问题的正确解决方案:

在内部 Sharepoint 站点中,单击上传后,然后单击文件夹,我使用 SendKeys.SendWait 输入目录位置。然后在将 "Enter" 作为 Send.Keys.SendWait 发送后,会出现一个对话框,我需要在其中单击上传按钮,但无法搜索到该元素,因为它似乎不是 [=33= 的一部分].

这是代码片段:

SendKeys.SendWait(@"C:\Automation\Testing\");

SendKeys.SendWait("{Enter}");

SendKeys.SendWait("{Enter}");

IAlert alert = Driver.driver.SwitchTo().Alert();
alert.Accept();

我也尝试过使用 JavaScript 来处理这个问题,但没有帮助:

IJavaScriptExecutor jsX = (IJavaScriptExecutor)driver;

jsX.ExecuteScript("Object.defineProperty(BeforeUnloadEvent.prototype, 
'returnValue', { get:function(){}, set:function(){} });");

在另一个线程中,我注意到添加“--disable-notifications”和“--disable-popup-blocking”的建议,但这也不起作用。

代码如下:

ChromeOptions options = new ChromeOptions();
options.AddArguments("disable-infobars", "start-maximized", "no-sandbox", "--disable-notifications", "--disable-popup-blocking");
 Driver.driver = new ChromeDriver(options);

在对话框中找到并单击 "Upload" 的最佳方法是什么?

您可以尝试使用InputSimulator Nuget 来模拟键盘按钮事件。在屏幕截图中选择 Cancel 按钮,按 Tab 键可能会将焦点更改为 Upload 按钮,然后 Enter 键可能会按 Upload 按钮:

var sim = new WindowsInput.InputSimulator();
System.Threading.Thread.Sleep(3000);
sim.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.TAB);
System.Threading.Thread.Sleep(300);
sim.Keyboard.KeyPress(WindowsInput.Native.VirtualKeyCode.RETURN);