Python?selenium?find_element()示例詳解
selenium有以下定位方式:
driver.find_element_by_id(‘id')
driver.find_element_by_xpath('xpath')
driver.find_element_by_link_text('link_text')
driver.find_element_by_partial_link_text('partial_link_text')
driver.find_element_by_name('name')
driver.find_element_by_tag_name('tag_name')
driver.find_element_by_class_name('class_name')
driver.find_element_by_css_selector('css_selector')但我們看下源碼:
D:\Program Files\Python27\Lib\site-packages\selenium\webdriver\remote\webdriver.py
可以看到,上面那些定位方式,實(shí)際上都是調(diào)用的driver.find_element(by, value)

我們繼續(xù)看下find_element()的源碼,大部分方法最終全是通過(guò)By.CSS_SELECTOR來(lái)實(shí)現(xiàn)的查找

那By又都有哪些條件呢?
D:\Program Files\Python27\Lib\site-packages\selenium\webdriver\common\by.py
繼續(xù)看源碼,可以看到下面8種
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

所以我們以后就都只用find_element()就好了,因?yàn)樽罱K實(shí)際上也都是調(diào)用的這個(gè)方法。
簡(jiǎn)單封裝一下,以后就記住find_element()一個(gè)方法即可。
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from appium import webdriver
class BasePage(object):
def split_locator(self, locator):
"""
分解定位表達(dá)式,如'css,.username',拆分后返回'css selector'和定位表達(dá)式'.username'(class為username的元素)
:param locator: 定位方法+定位表達(dá)式組合字符串,如'css,.username'
:return: locator_dict[by], value:返回定位方式和定位表達(dá)式
"""
by = locator.split(',')[0]
value = locator.split(',')[1]
locator_dict = {
'id': 'id',
'name': 'name',
'class': 'class name',
'tag': 'tag name',
'link': 'link text',
'plink': 'partial link text',
'xpath': 'xpath',
'css': 'css selector',
}
if by not in locator_dict.keys():
raise NameError("wrong locator!'id','name','class','tag','link','plink','xpath','css',exp:'id,username'")
return locator_dict[by], value
def wait_element(self, locator, sec=30):
"""
等待元素出現(xiàn)
:param locator: 定位方法+定位表達(dá)式組合字符串,用逗號(hào)分隔,如'css,.username'
:param sec:等待秒數(shù)
"""
by, value = self.split_locator(locator)
try:
WebDriverWait(self.driver, sec, 1).until(lambda x: x.find_element(by=by, value=value),message='element not found!!!')
log.info(u'等待元素:%s' % locator)
return True
except TimeoutException:
return False
except Exception, e:
raise e
def get_element(self, locator, sec=60):
"""
獲取一個(gè)元素
:param locator: 定位方法+定位表達(dá)式組合字符串,用逗號(hào)分隔,如'css,.username'
:param sec:等待秒數(shù)
:return: 元素可找到返回element對(duì)象,否則返回False
"""
if self.wait_element(locator, sec):
by, value = self.split_locator(locator)
try:
element = self.driver.find_element(by=by, value=value)
log.info(u'獲取元素:%s' % locator)
return element
except Exception, e:
raise e
else:
return False
def get_elements(self, locator):
"""
獲取一組元素
:param locator: 定位方法+定位表達(dá)式組合字符串,用逗號(hào)分隔,如'css,.username'
:return: elements
"""
by, value = self.split_locator(locator)
try:
elements = WebDriverWait(self.driver, 60, 1).until(lambda x: x.find_elements(by=by, value=value))
log.info(u'獲取元素列表:%s' % locator)
return elements
except Exception, e:
raise e以后調(diào)用,先定義元素,如
button = "id,su" # 頁(yè)面上id為su的元素
在用例中查找時(shí),只要寫(xiě)
find_element(button)
整體框架源碼:
https://github.com/songzhenhua/selenium_ui_auto/blob/master/page_object/base_page.py
總結(jié)
到此這篇關(guān)于Python selenium find_element()詳解的文章就介紹到這了,更多相關(guān)selenium find_element()詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python漢字轉(zhuǎn)拼音pypinyin庫(kù)、輸出excel的xlwt庫(kù)
本文介紹了如何使用Python的pypinyin庫(kù)和xlwt庫(kù),將漢字文本轉(zhuǎn)換為帶有拼音標(biāo)注的Excel文件,通過(guò)讀取文本、獲取拼音并寫(xiě)入Excel,實(shí)現(xiàn)了漢字和拼音的一一對(duì)應(yīng),同時(shí),文章也指出了潛在的問(wèn)題2025-04-04
使用Python將字符串轉(zhuǎn)換為格式化的日期時(shí)間字符串
這篇文章主要介紹了使用Python將字符串轉(zhuǎn)換為格式化的日期時(shí)間字符串,需要的朋友可以參考下2019-09-09
遠(yuǎn)程部署工具Fabric詳解(支持Python3)
這篇文章主要介紹了遠(yuǎn)程部署神器 Fabric,支持Python3 ,Fabric 出場(chǎng)了。Fabric 是一個(gè)遠(yuǎn)程部署神器,它可以在本地執(zhí)行遠(yuǎn)程服務(wù)器的命令。,需要的朋友可以參考下2019-07-07
Ranorex通過(guò)Python將報(bào)告發(fā)送到郵箱的方法
這篇文章主要介紹了Ranorex通過(guò)Python將報(bào)告發(fā)送到郵箱的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Python3.5編程實(shí)現(xiàn)修改IIS WEB.CONFIG的方法示例
這篇文章主要介紹了Python3.5編程實(shí)現(xiàn)修改IIS WEB.CONFIG的方法,涉及Python針對(duì)xml格式文件的讀寫(xiě)以及節(jié)點(diǎn)操作相關(guān)技巧,需要的朋友可以參考下2017-08-08
關(guān)于Python中對(duì)變量賦值過(guò)程的理解
在Python中對(duì)變量賦值過(guò)程的理解,有助于學(xué)習(xí)者對(duì)Python的變量和所指向的對(duì)象之間的指向關(guān)系深刻理解,避免編程中多個(gè)變量賦值后,對(duì)變量結(jié)果的不確定,,需要的朋友可以參考下2023-05-05
Python使用Tkinter實(shí)現(xiàn)機(jī)器人走迷宮
這篇文章主要為大家詳細(xì)介紹了Python使用Tkinter實(shí)現(xiàn)機(jī)器人走迷宮,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

