我正在嘗試撰寫一個 selenium 代碼來模擬打開/關閉操作。
這是該應用程式的 UI 及其實際源代碼,位于:

正如我們所見,label::before映射到“ on ”動作,label::after映射到“ off ”。
以下是我當前無法進行此類點擊的 python 代碼。
def turnoff_byPlanCapacity(self):
try:
by_Plan_Capacity = "//div[contains(text(), 'Modem1 Settings')]/following-sibling:div[2]/div[2]/div[1]/div[2]/div/label"
WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.XPATH, by_Plan_Capacity))).click()
except Exception as e:
self.logger.info(e)
raise
有誰知道它的解決方案?非常感謝
uj5u.com熱心網友回復:
請使用此 xpath
//input[starts-with(@id,'byPlanCapacity') and @type='checkbox']//following-sibling::label
請檢查dev tools(谷歌瀏覽器)我們是否有唯一的條目HTML DOM。
檢查步驟:
Press F12 in Chrome- >去element節- >做一個CTRL F- >再貼上xpath看看,如果你需要的element是越來越強調與1/1匹配的節點。
如果我們在 HTMLDOM 中有唯一的條目,那么
def turnoff_byPlanCapacity(self):
try:
by_Plan_Capacity = "//input[starts-with(@id,'byPlanCa[acity') and @type='checkbox']//following-sibling::label"
WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.XPATH, by_Plan_Capacity))).click()
except Exception as e:
self.logger.info(e)
raise
請注意,我正在使用element_to_be_clickable而不是presence_of_element_located
uj5u.com熱心網友回復:
要模擬單擊開/關按鈕,您可以使用以下任一定位器策略:
使用
css_selector:driver.find_element(By.CSS_SELECTOR, "label[for*='byPlanCapacity']").click()使用
xpath:driver.find_element(By.XPATH, "//label[starts-with(@for, 'byPlanCapacity')]").click()
所需的元素是一個動態的元素,因此,最好點擊你需要引起元素WebDriverWait的element_to_be_clickable(),你可以使用以下的定位策略:
使用
CSS_SELECTOR:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "label[for*='byPlanCapacity']"))).click()使用
XPATH:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[starts-with(@for, 'byPlanCapacity')]"))).click()注意:您必須添加以下匯入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
您的有效代碼塊將是:
def turnoff_byPlanCapacity(self):
try:
WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//label[starts-with(@for, 'byPlanCapacity')]"))).click()
except Exception as e:
self.logger.info(e)
raise
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/355809.html
上一篇:Selenium找不到任何元素
