Python+selenium實現Web自動化測試的各種元素定位

一、先安裝selenium驅動或者插件

這是我另一篇博客,詳細的介紹了各種瀏覽器如何安裝:
https://blog.csdn.net/qq_43107323/article/details/105423492

二、編寫Python代碼;我這裏是網上最全的元素定位

from selenium import webdriver
import time

dr = webdriver.Chrome()
# 打開登陸163郵箱的網頁
dr.get('http://mail.163.com/')

# 將瀏覽器窗口最大化
dr.maximize_window()

# 1、id
btn = dr.find_element_by_id('lbNormal').click()

# 2、找到郵箱賬號登錄框對應的iframe	#跳入框架
# 1、xpath 絕對路徑
dr.switch_to.frame(dr.find_element_by_xpath("/html/body/div[2]/div[3]/div/div[3]/div[4]/div[1]/div/iframe"))  # 跳入框架
# 2、xpath 相對路徑	有些變化的不適合用
# dr.switch_to.frame(dr.find_element_by_xpath('//*[@id="x-URS-iframe1587572206248.1785"]'))
# 3、使用元素名+屬性值	常用的
# dr.switch_to.frame(dr.find_element_by_xpath("//*[@frameborder='0']"))
# 4、使用元素名+包含部分屬性值
# dr.find_element_by_xpath("//*[contains(@name,'email')]").send_keys('123456789')	#獲取手機號輸入框
# 5、通過元素名+元素的文本內容	獲取超鏈接,注意空格	不建議用
# dr.find_element_by_xpath("//*[text()='忘記密碼?']").click()
# 6、通過元素名定位	獲取頁面所有的input元素 和 tag_name 差不多;僅限第一個元素
# driver.find_element_by_xpath('//input').send_keys("666888")
# 7、 通過元素名+索引定位
# driver.find_element_by_xpath('//div[1]/input').send_keys("666888")

# 3、name
dr.find_element_by_name('email').send_keys('15890501589')

#  4、使用tag_name 標籤名
# dr.find_element_by_tag_name('input').send_keys('15890501589')

# 找到密碼輸入框 輸入自己的郵箱密碼
# 5、class_name 如果有空格,可以用空格前 中間 後面的部分,但是這些屬性值是唯一的
dr.find_element_by_class_name('dlpwd').send_keys('123456')

# 找到登陸按鈕
dr.find_element_by_id('dologin').click()

dr.implicitly_wait(3)  # 智能等待
# 錯誤的密碼
false_password = dr.find_element_by_class_name("ferrorhead").text
if false_password == '帳號或密碼錯誤' :
	print(false_password)
	# 清除按鈕
	dr.find_element_by_xpath('/html/body/div[2]/div[2]/div[2]/form/div/div[3]/div[3]/div').click()
else :
	print('密碼正確')


# 斷言
dr.switch_to.default_content()  # 跳出框架
dr.implicitly_wait(2)  # 智能等待
real_result = dr.find_element_by_class_name('nui-tree-item-text').text
print(real_result)
if real_result == "收件箱":
	print('登錄成功')
else:
	print('執行失敗')
dr.implicitly_wait(2)  # 智能等待

# 6、link_text	超鏈接內容
dr.find_element_by_link_text('升級VIP').click()
# 7、partial_link_text 部分文本
dr.find_element_by_partial_link_text('VIP').click()

# css_selector
# 1、css_selector	id #表示
#  dr.find_element_by_css_selector('#lbNormal').click()
#  2、標籤+id
# dr.find_element_by_css_selector('div#lbNormal').click()
# # 3、classname .表示
# # dr.find_element_by_css_selector('.nui-tree-item-text').click()
# # 4、標籤+classname .表示
# dr.find_element_by_css_selector('span.nui-tree-item-text').click()
# # 5、標籤+屬性和屬性值
# btn = dr.find_element_by_css_selector("span[title='收件箱']").click()
#
# # 6、表籤+屬性和屬性值的方式:	模糊匹配
# # 1、匹配屬性值的前部分^
# dr.find_element_by_css_selector("span[title^='收']").click()
# # 2、匹配屬性值的前部分*
# dr.find_element_by_css_selector("span[title^='件']").click()
# # 3、匹配屬性值的後部分$
# dr.find_element_by_css_selector("span[title^='箱']").click()
#
# # 7、子孫元素方式(和xpath路徑類似)
# dr.find_element_by_css_selector("div#dvNavTree>ul>li>div").click()
# dr.find_element_by_css_selector("div#dvNavTree div").click()


# 8、句柄	頁面的唯一標識,相當於頁面的省份證號
dr.find_element_by_link_text("升級VIP").click()
print("當前頁面的title", dr.title)
print("當前頁面的句柄", dr.current_window_handle)  # 打印當前的句柄

list_handle = dr.window_handles  # 獲取所有的句柄	2個句柄
print(type(list_handle))
print(list_handle)
# dr.switch_to_window(list_handle[1])

for handle in list_handle:
	if handle != dr.current_window_handle:
		dr.switch_to_window(handle)
print("當前頁面的title", dr.title)
print("當前頁面的句柄", dr.current_window_handle)

# time.sleep(3)
# dr.quit()


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章