Selenium-单击按钮问题
Selenium- Click a button issue
使用进口:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
使用此 def 导航到按钮所在的确切 iFrame :
def changeIframetoManagement():
wait2 = WebDriverWait(driver, 10)
wait2.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "moduleManagement")))
我为完成该任务所做的尝试:
changeIframetoManagement()
driver.find_element_by_css_selector("body > div.bootbox.modal.fade.show-order-info-bootbox-
container.in > div > div > div.modal-body > button").click()
我也试过像这样通过 xPath 到达
driver.find_element_by_xpath("//html/body/div[5]/div/div/div[1]/button").click()
那是我所在的最后一帧
def changeIframetoOrders():
wait3 = WebDriverWait(driver, 10)
wait3.until(EC.frame_to_be_available_and_switch_to_it((By.NAME,
"orderInfo")))
切换到 iframe 后试试这个:
driver.find_element_by_css_selector("div.modal-dialog button.bootbox-close-button").click()
UPD
根据您最后的评论,由于您之前切换到位于 orderInfo
名称的 iframe,在切换到位于 moduleManagement
id 的 iframe 之前,您必须切换到默认内容,如下所示:
changeIframetoOrders()
driver.switch_to.default_content()
changeIframetoManagement()
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.modal-dialog button.bootbox-close-button"))).click()
看看这个 xpath 是否有效:-
driver.find_element_by_xpath(".//button[contains(@class,'close-button')]").click()
x 按钮在 moduleManagement iframe 中。
目标是使用 Selenium 单击它。
根据OP
wait3.until(EC.frame_to_be_available_and_switch_to_it((By.NAME,
"orderInfo")))
看起来他在另一个 iframe 中 orderInfo
。
所以我建议您在完成任何 iframe 内容时,始终将控件切换回默认内容,如下所示:
driver.switch_to.default_content()
现在您必须再次切换到 moduleManagement
iframe,如下所示:
wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "moduleManagement")))
然后像这样单击 x 按钮:
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, ''bootbox-close-button) and text()='x']"))).click()
使用进口:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
使用此 def 导航到按钮所在的确切 iFrame :
def changeIframetoManagement():
wait2 = WebDriverWait(driver, 10)
wait2.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "moduleManagement")))
我为完成该任务所做的尝试:
changeIframetoManagement()
driver.find_element_by_css_selector("body > div.bootbox.modal.fade.show-order-info-bootbox-
container.in > div > div > div.modal-body > button").click()
我也试过像这样通过 xPath 到达
driver.find_element_by_xpath("//html/body/div[5]/div/div/div[1]/button").click()
那是我所在的最后一帧
def changeIframetoOrders():
wait3 = WebDriverWait(driver, 10)
wait3.until(EC.frame_to_be_available_and_switch_to_it((By.NAME,
"orderInfo")))
切换到 iframe 后试试这个:
driver.find_element_by_css_selector("div.modal-dialog button.bootbox-close-button").click()
UPD
根据您最后的评论,由于您之前切换到位于 orderInfo
名称的 iframe,在切换到位于 moduleManagement
id 的 iframe 之前,您必须切换到默认内容,如下所示:
changeIframetoOrders()
driver.switch_to.default_content()
changeIframetoManagement()
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.modal-dialog button.bootbox-close-button"))).click()
看看这个 xpath 是否有效:-
driver.find_element_by_xpath(".//button[contains(@class,'close-button')]").click()
x 按钮在 moduleManagement iframe 中。
目标是使用 Selenium 单击它。
根据OP
wait3.until(EC.frame_to_be_available_and_switch_to_it((By.NAME,
"orderInfo")))
看起来他在另一个 iframe 中 orderInfo
。
所以我建议您在完成任何 iframe 内容时,始终将控件切换回默认内容,如下所示:
driver.switch_to.default_content()
现在您必须再次切换到 moduleManagement
iframe,如下所示:
wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "moduleManagement")))
然后像这样单击 x 按钮:
wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, ''bootbox-close-button) and text()='x']"))).click()