【问题标题】:Expandable element gets closed itself with single click可扩展元素通过单击自行关闭
【发布时间】:2019-10-23 05:54:07
【问题描述】:

我有一个与它相连的偶数监听器的 div。 div 只需单击即可展开并显示更多按钮。我试图通过单击打开 div,然后单击暴露的按钮。但是当我执行测试时,div 会被点击,展开以显示其他按钮,然后自行折叠。但是,如果手动执行它只会在单击两次时崩溃。因此,当我尝试单击暴露的按钮时,找不到它,我得到:以下错误可互换。

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element

Element is not clickable at point . Other element would receive the click

我猜可能附加的事件侦听器通过加载太快/太慢而在其中起作用。看起来其他元素与目标元素重叠。如何点击目标按钮。

我尝试在单击 div 和目标按钮之间给它 2 秒的睡眠时间,但似乎只要单击 div 元素,它就会同时展开和折叠。我可以看到它这样做。 我也尝试使用以下代码: driver.execute_script("arguments[0].click();", element)

这里是html代码sn-p:

   <div class="software-package-top" id="package2_toggle">

     <div class="software-package-info">
       <div class="software-package-name">
     name      </div>
       <div class="software-package-version">
         &nbsp;3.0.1      </div>
       <div class="software-package-status">
                 <span class="software-package-enabled">Disabled</span>&nbsp;&nbsp;<span class="software-package-not-running">Not Running</span>              </div>
     </div>
         <div class="software-package-arrow"></div>
       </div>
     <div class="software-package-details software-hidden" id="package2_controls" style="display: none;">
   <div class="software-package-description">
 </div>

 <hr>
 <div class="software-package-controls">
 <input type="button" name="View Release Notes" value="View Release Notes" id="package2_viewReleaseNotes" data-package="releaseNotes">
 <input type="button" name="View Runtime Log" value="View Runtime Log" id="package2_viewLog">
     <script>
 $(document).ready(function() {
       $("#package2_viewLog").click(function() {viewLog("---", "---", "no")});
 });
   </script>


   <script>
 $(document).ready(function() {
   $("#package2_enable").click(function() {appControl("---", "---", "enable",  "no")});
 });
   </script>
     <input type="button" name="Enable" value="Enable" id="package2_enable">



 <input type="button" name="Uninstall" value="Uninstall" id="package2_uninstall">
 <script>
 $(document).ready(function() {
   $("#package2_uninstall").click(function() {appControl("---", "---", "uninstall", "no")});
 });
 </script>

   </div>
 </div>
 </div>

【问题讨论】:

  • 你的网址是公开的吗?
  • 没有不公开的网址。

标签: python selenium selenium-webdriver webdriver webdriverwait


【解决方案1】:

正如您在手动操作时提到的那样,您在展开按钮上单击了两次。 尝试操作并双击事件。看看你是否有任何运气。

ActionChains(driver).move_to_element(element).double_click(element).perform()

ActionChains(driver).double_click(element).perform()

您需要有以下导入。

from selenium.webdriver.common.action_chains import ActionChains

【讨论】:

  • 如果我解释不清楚,我很抱歉。因此,div 应该在单击时展开,并在手动操作时通过第二次单击折叠。当我使用 selenium 时,它看起来已经单击了两次,以便它展开 div 并在关闭它后不久也关闭它,这在测试运行时可见。但是,我尝试了您的上述解决方案,但它不起作用。
  • 尝试使用 click(element) 而不是 double_click(element)
  • 与 click() 它的工作方式与以前的工作方式完全相同:WebDriverWait(self.driver, 20).until( EC.element_to_be_clickable((By.CSS_SELECTOR, css_selector))).click()
【解决方案2】:

所有这些错误消息...

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element

Element is not clickable at point . Other element would receive the click

...暗示您甚至在 JavaScriptAJAX 调用完全渲染元素和完整的 DOM Tree 之前就调用了 click()


解决方案

您需要为所需的element_to_be_clickable() 诱导WebDriverWait,如下所示:

WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.XPATH, element_xpath))).click()

【讨论】:

  • 非常感谢。单击可折叠元素时,我正在等待 webdriver,但在单击此新暴露元素时没有等待。它就像一个魅力。你真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2022-01-07
  • 2017-02-22
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多