Расширяемый элемент сам закрывается одним кликом - PullRequest
2 голосов
/ 07 июня 2019

У меня есть 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

Я думаю, вероятно, подключенный прослушиватель событий имеетроль в этом либо путем загрузки слишком быстро / медленно.Похоже, другие элементы перекрывают целевой элемент.Как я могу нажать на целевую кнопку.

Я пытался дать ему время ожидания 2 секунды между нажатием кнопки div и целевой кнопки, но кажется, что при нажатии на элемент 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 ]

1 голос
/ 08 июня 2019

Все эти сообщения об ошибках ...

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

и

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

... означают, что вы вызываете click() даже до JavaScript или AJAX Call полностью отображает элемент и полное Дерево DOM .


Решение

Вам нужно вызвать WebDriverWait для желаемого element_to_be_clickable() следующим образом:

WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.XPATH, element_xpath))).click()
0 голосов
/ 07 июня 2019

Как вы уже упоминали, когда вы делаете это вручную, вы дважды нажимаете на кнопку расширения.Попробуйте действие и дважды щелкните на event.see, если вам повезет.

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

ИЛИ

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

Вам необходим следующий импорт.

from selenium.webdriver.common.action_chains import ActionChains
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...