使用 selenium 和 python 处理模态

问题描述 投票:0回答:1
python selenium-webdriver modal-dialog
1个回答
0
投票

绝对xpath,例如:

/html/body/div[4]

/html/body/div[5]

具有从根到我们想要识别的元素的完整路径,总是很脆弱,就像从根到元素的属性发生任何变化一样,我们的绝对xpath将变得无效。


解决方案

您可以使用逻辑 xpath,而不是绝对 xpath,如下所示:

br.find_element(By.XPATH, "//div[@id='footer']/div[@class='modal_list pleaseWait_container']")
print(thread, "found modal list please wait container")
sleep(5)
br.find_element(By.XPATH, "//div[@id='footer']/div[@class='ui-dialog ui-widget ui-widget-content ui-corner-all ui-front newpropushbelowmenu ui-dialog-buttons']")
print(thread, "line after modal list please wait container")

此外,由于元素位于 Modal 内,理想情况下您需要为 presence_of_element_ located() 引入 WebDriverWait 并且您可以使用以下 定位器策略:

WebDriverWait(br, 20).until(EC.presence_of_element_located((By.XPATH, "//div[@id='footer']/div[@class='modal_list pleaseWait_container']")))
print(thread, "found modal list please wait container")
WebDriverWait(br, 20).until(EC.presence_of_element_located((By.XPATH, "//div[@id='footer']/div[@class='ui-dialog ui-widget ui-widget-content ui-corner-all ui-front newpropushbelowmenu ui-dialog-buttons']")))
print(thread, "line after modal list please wait container")
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
© www.soinside.com 2019 - 2024. All rights reserved.