重新學習selenium的各種元素定位。昨天就和上傳文件杠上了。
拿來練手的是163郵箱,結果發現添加附件按鈕死活定位不到。—— 花了一天時間,用chrome自帶的控制台查看元素,xpath、css、fullxpath都試過不行,
包括下載插件katalon recorder 錄制的腳本不行,又下載BlazeMeter,錄制的腳本還是不行。
—— 到最后,才發現這個元素是動態屬性,它的爸爸,爸爸的爸爸,爸爸的爸爸的爸爸……也都是動態屬性的,往上追了很多代才找到一個固定屬性的id,
還是用xpath定位的。
把代碼貼出來,供大家參考。【xpath定位元素:外面單引號,里面雙引號】
e2='//*[@id="_dvModuleContainer_compose.ComposeModule_0"]/div[1]/section/header/div[3]/div[1]/div[2]/input'
driver.find_element_by_xpath(e2).send_keys(r'C:\Users\stonmy\Desktop\UI\fla.jpg') #點擊添加附件 並上傳圖片
ps:元素定位不到的情況,首先想要用多種方式來嘗試定位--查看是否有iframe、是否有動態屬性的原色--借助插件錄制腳本。
遇到類似場景:一定要一層一層往上追蹤,不要嫌麻煩。
如果你有更好的方法,也可以分享一下。
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://mail.163.com/')
driver.maximize_window()
driver.implicitly_wait(10)
driver.find_element_by_id('lbNormal').click()
driver.implicitly_wait(10)
driver.switch_to.frame(driver.find_element_by_xpath('//*[@id="loginDiv"]/iframe'))
driver.implicitly_wait(10)
driver.find_element_by_name('email').send_keys('13923830000')
driver.find_element_by_name('password').send_keys('mima') #輸入正確的密碼
driver.find_element_by_id('dologin').click()
driver.implicitly_wait(50)
h = driver.current_window_handle
driver.switch_to.window(h)
driver.implicitly_wait(40)
driver.find_element_by_id('_mail_component_19_19').click() #點擊首頁的寫信按鈕
driver.implicitly_wait(50)
h1 = driver.current_window_handle
driver.switch_to.window(h1)
driver.implicitly_wait(40)
# 輸入對方郵箱地址和郵件內容
driver.find_element_by_class_name('nui-editableAddr-ipt').send_keys('120221363@qq.com') #輸入收件人
driver.implicitly_wait(40)
e1='//*[@id="_dvModuleContainer_compose.ComposeModule_0"]/div[1]/section/header/div[2]/div[1]/div/div/input'
driver.find_element_by_xpath(e1).send_keys('春天來了') #輸入主題
driver.switch_to.frame(driver.find_element_by_class_name('APP-editor-iframe'))
driver.find_element_by_class_name('nui-scroll').send_keys('石頭記,一部經典著作。值得看了一遍又一遍!')
driver.switch_to.default_content() #退出富文本的iframe
driver.implicitly_wait(50)
e2='//*[@id="_dvModuleContainer_compose.ComposeModule_0"]/div[1]/section/header/div[3]/div[1]/div[2]/input'
driver.find_element_by_xpath(e2).send_keys(r'C:\Users\stonmy\Desktop\UI\fla.jpg') #點擊添加附件 並上傳圖片
driver.find_element_by_class_name('nui-toolbar-item').click() #點擊發送按鈕
driver.implicitly_wait(20)
# driver.find_element_by_id('_mail_button_10_229').click() #不輸入主題時的彈窗確認
time.sleep(3)
driver.quit()