Selenium JavaScriptExecutor单击功能仅在第一次使用

时间:2018-11-30 17:58:54

标签: javascript c# selenium selenium-webdriver webdriverwait

在UI上,我有一个checkAll按钮,该按钮实现为div块下的span。单击它变得很困难,所以我使用了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);

1 个答案:

答案 0 :(得分:2)

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

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

失败,即没有错误或异常,也没有发生click()

但是,如果您注释掉line 3,即:的第一个实例,则再次出现

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

然后line 6,即:的第二个实例

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

运作良好。

第6行失败的原因是,当您在 JavaScript 上调用click()时,在 IwebElement chkAll em> / jQuery 可能处于活动状态。

解决方案

您需要在 IWebElement chkAll 上使 WebDriverWait 成为 clickable ,然后才能在< em>第6行,您可以按以下方式更新第6行

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