如何通过Selenium和Python在模式窗口中单击close按钮

如何通过Selenium和Python在模式窗口中单击close按钮,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,无法在模式窗口中单击按钮id=“close 尝试所有XPath,如: //button[@data-dismiss='modal'] //button[@id='close'], //button[@type='button'] //button[contains(.,'Закрыть')] //button[contains(@data-dismiss,'modal')] //button[contains(@id,'close')] 也在尝试组合XPath,但仍然不起作用 代码: <

无法在模式窗口中单击按钮
id=“close

尝试所有XPath,如:

//button[@data-dismiss='modal']
//button[@id='close'], //button[@type='button']
//button[contains(.,'Закрыть')]
//button[contains(@data-dismiss,'modal')]
//button[contains(@id,'close')]
也在尝试组合XPath,但仍然不起作用

代码:

<div id="idCardGroupChangeStatusResult" class="modal fade in" tabindex="-1" role="dialog" aria-hidden="false" style="display: block;">
<div class="modal-dialog st-modal-dialog" style="width: 600px; padding-top: 250px;">
<div class="modal-content">
<div class="modal-header st-pad-normal">
<div class="modal-body">
<div class="modal-footer">
<button id="close" class="btn btn-default btn-sm" type="button" data-dismiss="modal"> Закрыть </button>
</div>
</div>
</div>
</div>

Закрыть 
Css不适用于


有什么想法吗?

因为文本为的元素在一个范围内,所以要定位所需的元素,您必须引导WebDriverWait使元素可点击,并且您可以使用以下任一解决方案:

  • 使用
    CSS\u选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn.btn-default.btn-sm#close[data-dismiss='modal']"))).click()
    
  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn btn-default btn-sm' and @id='close'][@data-dismiss='modal']"))).click()
    
  • 注意:您必须添加以下导入:

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

如果
元素可点击
不起作用,请尝试下面的代码检查页面上是否有多个关闭按钮。您可以使用下面的代码按可见或可见以及最新的按钮进行筛选,然后单击它

close_buttons = WebDriverWait(driver, 5).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#idCardGroupChangeStatusResult #close")))
# check how many buttons in on the HTML, you can try "visibility_of_all_elements_located"
print(len(close_buttons))

visible_buttons = [close_button for close_button in close_buttons if close_button.is_displayed()]
visible_buttons_len = len(visible_buttons)
print(visible_buttons_len)

visible_buttons[visible_buttons_len - 1].click()
信息消失了吗

更新,消息窗口消失:

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

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 5)
actions = ActionChains(driver)

#...

status_message = wait.until(
    EC.visibility_of_element_located((By.CSS_SELECTOR, "#idCardGroupChangeStatusResult")))

actions.move_to_element(status_message).perform()
# here you can get text from message window, check/assert ..
status_message.find_element_by_css_selector("#close").click()

答案可能是Thx的重复!尝试这种方式,超时异常。也尝试这种方法-el=self.xpath('/*[@aria hidden=“false”]')el2=el.xpath('//div[@class=“modal dialog st modal dialog”]')el3=el2.xpath('//div[@class=“modal footer”]'))el4=el3.xpath(“//button[@id='close'])el4。单击此项”一步一步地“方法不起作用”你从哪里得到所有这些
el.xpath('//div[@class=“modal dialog st modal dialog”])
和`el3.xpath(“//button[@id='close']”)`从?您可以复制、粘贴和执行代码行并更新我的状态吗?使用Xpath:..\..\..\venv1\lib\site packages\selenium\webdriver\support\wait.py:80:TimeoutException。使用css sameThx作为答案!它会消失,然后我会在调试模式下一步一步地运行tesn,但如果运行它会返回-E indexer:list index out ofrange@Odiosuu共享<代码>打印(len(关闭按钮))结果打印在console@Odiosuu当您手动将鼠标悬停在消息窗口上时,它会消失还是一直停留到您取消悬停?一直停留到我将其悬停到selenium.common.exceptions.TimeoutException:message:..\..\..\..\venv1\lib\site packages\selenium\webdriver\support\wait.py:80:TimeoutException.u尝试使用time.sleep(5)但这并没有帮助。在我得到那个模态窗口之前,测试失败了