首页 > 解决方案 > 使用 RemoteWebDriver 在 Firefox 68.0 和 Safari 12.1.1 中选择表格行时出现问题

问题描述

我在使用 Firefox 和 Safari RemoteWebDrivers 选择表格行时遇到问题。

表格已编码,因此单击一行可选择该行,双击打开一个表单以编辑表格条目(如果条目可编辑)。

我需要单击以选择一行,然后单击以选择表格的多个连续行。我有一个适用于 Chrome 和 Edge 但不适用于 Firefox 或 Safari 的解决方案。我真的很想要一个通用的解决方案,但我可以适应特定浏览器的特殊情况。天知道,我已经有很多了。:-(

版本: Firefox:68.0 GeckoDriver 24.0 在 Windows 8.1 64 位上运行

Safari:12.1.1
在 High Sierra 10.13.6 上运行

点击代码如下所示(元素是 \ 元素):

Wait.Until(d => element.Enabled);
if (Browser == BROWSERS.SAFARI)
{
    IJavaScriptExecutor executor = Driver;
    executor.ExecuteScript("arguments[0].focus();", element);
    executor.ExecuteScript("arguments[0].click();", element);
 }
 else
 {
    element.Click(); // This only works intermittently on Safari 
 }

shift click 的代码如下所示(startRow 和 endRow 是元素):

    Actions action = new Actions(wd.Driver);
    action.Click(startRow).KeyDown(Keys.Shift).Click(endRow).KeyUp(Keys.Shift).Perform();

火狐问题:

  1. 单击一次不起作用。(见上面的代码)

预期:被点击的行被选中。实际:它会引发 ElementNotInteractableException。

  1. 按住 Shift 单击以选择多行就像双击一样。

我得到了我的范围的开始和结束行元素,然后执行上面显示的 shift-click 代码。

预期: startRow 和 endRow (包括)之间的所有行都被选中,不会发生其他任何事情。实际: startRow 和 endRow (包括)之间的所有行都被选中,但用于编辑 startRow 条目的表单也会打开。有趣的是,它总是打开 startRow 的表单,无论我是先点击 endRow 然后点击 startRow 还是反之亦然。

Safari 问题:上面显示的 Shift 键单击代码会导致 Safari 关闭并显示一条消息:“Safari 意外退出。” 报告显示:

10  com.apple.JavaScriptCore        0x000000010699b812 WTF::RunLoop::performWork(void*) + 34
11  com.apple.CoreFoundation        0x00007fff41a12581 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
12  com.apple.CoreFoundation        0x00007fff41aca8ac __CFRunLoopDoSource0 + 108
13  com.apple.CoreFoundation        0x00007fff419f5530 __CFRunLoopDoSources0 + 208
14  com.apple.CoreFoundation        0x00007fff419f49ad __CFRunLoopRun + 1293
15  com.apple.CoreFoundation        0x00007fff419f4207 CFRunLoopRunSpecific + 487
16  com.apple.HIToolbox             0x00007fff40cd4d96 RunCurrentEventLoopInMode + 286
17  com.apple.HIToolbox             0x00007fff40cd4b06 ReceiveNextEventCommon + 613
18  com.apple.HIToolbox             0x00007fff40cd4884 _BlockUntilNextEventMatchingListInModeWithFilter + 64
19  com.apple.AppKit                0x00007fff3ef84a73 _DPSNextEvent + 2085
20  com.apple.AppKit                0x00007fff3f71ae34 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 3044
21  com.apple.Safari.framework      0x00000001059f7bf0 -[BrowserApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 273
22  com.apple.AppKit                0x00007fff3ef79885 -[NSApplication run] + 764
23  com.apple.AppKit                0x00007fff3ef48a72 NSApplicationMain + 804
24  libdyld.dylib                   0x00007fff699bd015 start + 1

这对我来说不是很丰富(尽管我可以认同 WTF 部分)。

标签: c#selenium-webdriverselenium-firefoxdriver

解决方案


我通过完全放弃操作并仅使用 javascript 来“解决”shift-click 问题。

public void ShiftClick(IWebElement control)
{
   string shiftClickScript = "var evt = document.createEvent('MouseEvents');" +
        "evt.initMouseEvent('click',true, true, window, 0, 0, 0, 0, 0, false, false, true, false, 0, null);" +
        "arguments[0].dispatchEvent(evt);";
   ((IJavaScriptExecutor)Driver).ExecuteScript(shiftClickScript, control);
}

我仍然不知道为什么 Actions 方法不起作用......


推荐阅读