javascript - Selenium JavaScriptExecutor 单击功能仅在第一次时有效

标签 javascript c# selenium selenium-webdriver webdriverwait

在 UI 上,我有一个 checkAll 按钮,它是作为 div block 下的跨度实现的。点击它变得很困难,所以我使用了 JavaScriptExcutor。我想点击两次。代码如下6行。第 3 行总是成功,但第 6 行总是默默地失败(没有错误或异常,但单击没有发生)。如果我注释掉第 3 行,那么第 6 行将起作用。为什么?请帮助我。

IJavaScriptExecutor executor = (IJavaScriptExecutor)drv;
IWebElement chkAll = TaskerStatus.FindElement(By.Id("header3-column0"));
executor.ExecuteScript("arguments[0].click();", chkAll);

cmdBar1collapseAll.Click();
expandAllBtn.Click();
executor.ExecuteScript("arguments[0].click();", chkAll);

最佳答案

如果我正确理解了用例/问题第6行即:

executor.ExecuteScript("arguments[0].click();", chkAll);

失败静默,即没有错误或异常,并且 click() 也没有发生。

但是如果您注释掉第 3 行,即第一个实例:

executor.ExecuteScript("arguments[0].click();", chkAll);

然后第 6 行,即第二个实例:

executor.ExecuteScript("arguments[0].click();", chkAll);

功能良好。

第 6 行失败的原因是,当您在 IWebElement chkAll 上调用 click() 时,出现 < em>JavaScript/jQuery 可能已处于事件状态。

解决方案

在调用 IWebElement chkAll 之前,您需要诱导 WebDriverWait 使其可点击 em>第 6 行,您可以按如下方式更新第 6 行:

executor.ExecuteScript("arguments[0].click();", new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(TaskerStatus.FindElement(By.Id("header3-column0")))));

关于javascript - Selenium JavaScriptExecutor 单击功能仅在第一次时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53562591/

相关文章:

c# - 母版页链接的背景颜色在 Internet Explorer 中发生变化,但在 Mozilla Firefox 中不起作用

selenium - 隐式等待和显式等待之间的内部工作区别是什么

java - 如何定位列表元素(Selenium)?

javascript - 如何从 KML 文件中获取所有要素/多边形的列表?

javascript - jquery mobile,从事件调用转换

c# - 如何在 DataTable 中公开列

selenium - docker run -v bindmount 失败

javascript - jqGrid无法从服务器加载xml数据

javascript - 查找阿基米德螺线上某个点的 x,y 坐标

c# - c++/c# 命名管道中的问题