【问题标题】:Selenium JavaScriptExecutor click function works only first timeSelenium JavaScriptExecutor 点击功能只在第一次工作
【发布时间】:2019-05-02 21:47:02
【问题描述】:

在 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);

【问题讨论】:

  • 我复制了第 6 行的一行(作为第 7 行)然后它起作用了。不明白为什么第 6 行现在可以工作,但必须在那里才能使第 7 行正常工作。
  • 更正上面注释中的一个错误:第 6 行现在= 第 6 行不是
  • 如果在js中定位元素怎么办:document.getElementById('header3-column0').click()
  • 您好 pguardiario,我尝试了您的建议。没有什么变化。不管怎么说,还是要谢谢你。我想我找到了根本原因。
  • 好吧好吧。在这种情况下,您应该回答自己的问题。

标签: javascript c# selenium selenium-webdriver webdriverwait


【解决方案1】:

如果我正确理解了 用例 / 问题第 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 行 失败的原因是,当您在 IWebElement chkAll 上调用 click() 时,JavaScript / jQuery 可能已经激活了。

解决方案

在调用 第 6 行,您可以按如下方式更新 第 6 行

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

【讨论】:

  • 您好 DebanijanB,谢谢您的建议。我试过你的代码。它抛出一个超时异常。它还说 ExpectedContidtion 的功能已过时。但我知道你的意思。时间有时是个问题。我现在找到了根本原因。这是因为 line4 代码。这个内部实现导致人眼看不到按钮点击效果。但它确实做到了。我有一个解决方法来解决它。但是谢谢。
猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-25
  • 1970-01-01
  • 2013-09-21
相关资源
最近更新 更多