只需单击一下,可扩展元素即可自行关闭

时间:2019-06-07 17:52:49

标签: python selenium selenium-webdriver webdriver webdriverwait

我有一个div,该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代码段:

   <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>

2 个答案:

答案 0 :(得分:1)

所有这些错误消息...

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()

答案 1 :(得分:0)

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

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

OR

from selenium.webdriver.common.action_chains import ActionChains

您需要导入以下内容。

{{1}}