-
前言
- 由于web頁面元素class屬性值帶有空格堂淡,導(dǎo)致直接使用class屬性值元素定位失敗
- 如: class="inputstyle password" 肩袍,直接使用定位:driver.find_element_by_class_name("inputstyle password").send_keys("1111")
- **html classname值描述: **規(guī)定元素的類的名稱岖免。如需為一個元素規(guī)定多個類,用空格分隔類名。
- W3cschool 對于class屬性介紹
- 報錯日志
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".inputstyle password"}
(Session info: chrome=81.0.4044.138)
-
示例:QQ郵箱 - 賬號/密碼輸入框
賬號輸入框:class = inputstyle
-
密碼輸入框:class = inputstyle password
-
解決辦法
- 方法一:driver.find_element_by_class_name方式定位
- 控件class值包含多個類奈泪,可使用任意單個唯一類型來定位,如:inputstyle灸芳、password
- 但是由于賬號輸入框class屬性值為inputstyle涝桅,需取唯一屬性,故密碼輸入框只能使用password
driver.find_element_by_class_name("password").send_keys("1111")
- 方法2:driver.find_element_by_css_selector
# class屬性定位 driver.find_element_by_css_selector("[class='inputstyle password']").send_keys("1111") # 各空格變"." driver.find_element_by_css_selector(".inputstyle.password").send_keys("1111") # 單個唯一屬性 driver.find_element_by_css_selector(".password").send_keys("5555")
- 方法一:driver.find_element_by_class_name方式定位
示例代碼
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("https://mail.qq.com/")
driver.implicitly_wait(10)
driver.switch_to.frame("login_frame")
# 由于當(dāng)前PC已登錄QQ烙样,需從快速登錄切換至賬號密碼登錄方式
# 若無可注釋
driver.find_element_by_class_name("switch_btn").click()
# 報錯用法
# driver.find_element_by_class_name("inputstyle password").send_keys("1111")
# inputstyle 為賬號輸入框class屬性值冯遂,即會輸入至賬號輸入框
driver.find_element_by_class_name("inputstyle").clear()
driver.find_element_by_class_name("inputstyle").send_keys("1111")
time.sleep(2)
# password 為密碼輸入框唯一屬性值,即正常輸入至密碼輸入框
driver.find_element_by_class_name("password").clear()
driver.find_element_by_class_name("password").send_keys("2222")
time.sleep(2)
# css_selector定位:取class屬性定位误阻,即正常輸入至密碼輸入框
driver.find_element_by_css_selector("[class='inputstyle password']").clear()
driver.find_element_by_css_selector("[class='inputstyle password']").send_keys("3333")
time.sleep(2)
# css_selector定位:“.”替換空格债蜜,即正常輸入至密碼輸入框
driver.find_element_by_css_selector(".inputstyle.password").clear()
driver.find_element_by_css_selector(".inputstyle.password").send_keys("4444")
time.sleep(2)
# css_selector定位:“.”替換空格并取唯一屬性值,即正常輸入至密碼輸入框
driver.find_element_by_css_selector(".password").clear()
driver.find_element_by_css_selector(".password").send_keys("5555")
time.sleep(2)
# css_selector定位:“.”替換空格究反,inputstyle為賬號輸入框唯一屬性值,即正常輸入至賬號輸入框
driver.find_element_by_css_selector(".inputstyle").clear()
driver.find_element_by_css_selector(".inputstyle").send_keys("5555")
Key words
Appium儒洛、selenium精耐、class定位報錯、web自動化琅锻、安卓自動化卦停、class定位、控件定位