使用RemoteWebDriver

时间:2019-07-16 16:32:23

标签: c# selenium-webdriver selenium-firefoxdriver

我在使用Firefox和Safari RemoteWebDrivers选择表行时遇到麻烦。

对表进行了编码,因此单击行即可选择该行,然后双击可打开一个表单来编辑表条目(如果该条目是可编辑的)。

我需要单击一下以选择一行,然后按住Shift单击以选择表的多个连续行。我有一个适用于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();

Firefox问题:

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

预期:已选择要单击的行。 实际:它引发ElementNotInteractableException。

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

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

预期:选择介于startRow和endRow之间的所有行,并且不发生其他任何情况。 实际:选中了介于startRow和endRow之间的所有行,但是还会打开用于编辑startRow条目的表单。 有趣的是,无论我是先单击endRow然后单击startRow还是反之,它总是打开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部分)。

1 个答案:

答案 0 :(得分:0)

我已经“解决”了Firefox的问题。似乎更新到68.0后,单击仅适用于我仅用于Safari的javascript。 Firefox的Shift键单击代码现在分为以下部分:

Actions action = new Actions(wd.Driver);
wd.Click(startRow);
action.KeyDown(startRow, Keys.Shift).Perform(); // Safari still crashes here 
wd.Click(endRow);
action.KeyUp(Keys.Shift).Perform();

我仍然无法使用Safari代码。如果我使用相同的代码,但在对action.KeyDown的调用中删除了startRow参数,则它不会崩溃,但也不会像按住Shift键那样工作。也就是说,它单击并选择startRow,然后单击endRow,则选择内容将简单地移至endRow(未选择其他任何内容)。

这似乎与Safari (12.1) Webdriver hard crash on Selenium click() and actions.clickAndHold([some web element]).perform()上的类似问题有关