Python 如何关闭或关闭模式对话框

Python 如何关闭或关闭模式对话框,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我有一个模态对话框,在我确定它的存在并提取它的文本后,我需要关闭/关闭它。当我点击按钮下载一个文件时,模式出现,它说“正在生成debuginfo文件。请稍候”。这个模式一直存在,直到文件下载开始,这取决于debuginfo文件的大小,文件下载时间过长。是否有方法关闭此对话框并从中提取文本退出 我正在使用以下代码提取文本: downloadText = WebDriverWait(self.driver,40).until(EC.visibility_of_element_located((By.

我有一个模态对话框,在我确定它的存在并提取它的文本后,我需要关闭/关闭它。当我点击按钮下载一个文件时,模式出现,它说“正在生成debuginfo文件。请稍候”。这个模式一直存在,直到文件下载开始,这取决于debuginfo文件的大小,文件下载时间过长。是否有方法关闭此对话框并从中提取文本退出

我正在使用以下代码提取文本:

downloadText = WebDriverWait(self.driver,40).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.ui-dialog-content.ui-widgetcontent#dialog"))).get_attribute("innerHTML").split(">")[1]
以下是此模式的html代码:

     <div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix">
     <span id="ui-id-1" class="ui-dialog-title">Download debug info</span>
     <button class="ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-dialog-titlebar-close" role="button" aria-disabled="false" title="close">
       <span class="ui-button-icon-primary ui-icon ui-icon-closethick">
       </span>
       <span class="ui-button-text">close</span>
     </button>
   </div>
   <div id="dialog" class="ui-dialog-content ui-widget-content" style="width: auto; min-height: 0px; max-height: none; height: 177px;">
     <br>Generating the debuginfo file. Please wait.</div>
     <div class="ui-resizable-handle ui-resizable-n" style="z-index: 90;">
     </div>
     <div class="ui-resizable-handle ui-resizable-e" style="z-index: 90;">
     </div>
     <div class="ui-resizable-handle ui-resizable-s" style="z-index: 90;">
     </div>
     <div class="ui-resizable-handle ui-resizable-w" style="z-index: 90;">
     </div>
     <div class="ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se" style="z-index: 90;">
     </div>
     <div class="ui-resizable-handle ui-resizable-sw" style="z-index: 90;">
     </div>
     <div class="ui-resizable-handle ui-resizable-ne" style="z-index: 90;">
     </div>
     <div class="ui-resizable-handle ui-resizable-nw" style="z-index: 90;">

 </div> ```

下载调试信息
关闭

正在生成debuginfo文件。请稍等。 ```
根据原始帖子中提供的示例代码,您应该能够使用下面的xpath关闭对话框

 //span[@class='ui-button-icon-primary ui-icon ui-icon-closethick']
下面是即使元素不可见也要单击它的脚本

ele = driver.find_element_by_xpath("//span[@class='ui-button-icon-primary ui-icon ui-icon-closethick']")
driver.execute_script("arguments[0].click();",ele)

关闭模式对话框,您必须使
元素成为可点击的()
的WebDriverWait,并且您可以使用以下任一选项:

  • 使用
    CSS\u选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.ui-button.ui-widget.ui-state-default.ui-corner-all.ui-button-icon-only.ui-dialog-titlebar-close[title='close'] span.ui-button-icon-primary.ui-icon.ui-icon-closethick"))).click()
    
  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='ui-button ui-widget ui-state-default ui-corner-all ui-button-icon-only ui-dialog-titlebar-close' and @title='close']//span[@class='ui-button-icon-primary ui-icon ui-icon-closethick']"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

有与
下载调试信息
相关的
关闭
,你能点击它吗?我不知道有关闭按钮。现在我选中它是一个十字标记来关闭对话框,但它是隐藏的。我如何使其可见以关闭它?我使用了此解决方案,它起了作用。但唯一的问题是,检测到该元素可点击的时间太长,约20-25秒。是否有可能元素_to _be _clickable()很慢,并且有其他替代方法吗?@nd23使用Selenium时,遵循经验法则,
click()
应该始终被调用,否则
click()
可能会因各种原因而失败。@nd23如果这个/任何答案对您有帮助,请给出答案,以方便将来的读者。