(06)selenium頁面元素定位02

比較好用的一些元素定位

一、Xpath

1嘹害、基本常用

頁面上

<input type="text" value="" name="IDCard" id="iptIDCard" maxlength="18" autocomplete="off" placeholder="請輸入">

selenium + python 獲取元素

driver.find_element_by_xpath('//*[@id="iptIDCard"]').send_keys(idcard)  #輸入身份證號碼

2旋圆、確定頁面上顯示元素的文字

element = driver.find_element_by_xpath('//*[@id="app"]/div/div/div/div[2]/div/div/div[2]/div[4]/a').text
        print("element的值是:",element )

3、直接通過頁面上顯示的文字來獲取元素

頁面上

<div unselectable="unselectable" class="ant-select-selection__placeholder" style="display: none; user-select: none;">請選擇</div>

selenium + python 獲取元素

driver.find_element_by_xpath('//div[contains(text(),"請選擇")]').click()
# 當不確定是什么標簽時
driver.find_element_by_xpath('//*[contains(text(),"請選擇")]').click()

4只恨、通過多個標簽關聯(lián)译仗,查找出想要的元素

頁面上

<input type="text" value="哇哈哈" placeholder="身份證姓名">

selenium + python 獲取元素

driver.find_element_by_xpath("http://input[@type='text'][@value='哇哈哈']").clear()  # 調(diào)用clear()方法去清除名字
# 或者是通過 placeholder=“文字”進行刪除
# placeholder 是當輸入框什么都沒有輸入時顯示的內(nèi)容,value 是顯示輸入框中輸入的文字內(nèi)容
driver.find_element_by_xpath("http://input[@type='text'][@placeholder='身份證姓名']").clear()

5官觅、找出當前標簽下的兄弟標簽

頁面上

<div style="display: flex; box-sizing: border-box; width: 100%; height: 100%; align-items: center; justify-content: center; flex-direction: column;">
    <img src="/supplychain/main//images/add.png" style="height: 38px; width: auto;">
    <div style="display: flex; box-sizing: border-box; align-items: center; justify-content: center; font-size: 10px; color: rgb(179, 179, 179); margin-top: 8px;">我的照片</div>
    <input type="file" style="display: none;">
    <canvas style="display: none;"></canvas>
</div>

selenium + python 獲取元素

# 通過頁面上的文字找到元素纵菌,但由于上傳照片需要input,所以利用 following-sibling::input休涤,找到input元素
driver.find_element_by_xpath('//*[contains(text(),"我的照片")]/following-sibling::input').send_keys('H:\\哇哈哈\\photo.jpg')

二咱圆、class_name

1、基本常用

頁面上

<a class="code-btn ">獲取驗證碼</a>

selenium + python 獲取元素

driver.find_element_by_class_name('code-btn ').click()      # 點擊 獲取驗證碼

三功氨、元素獲取超時

如果發(fā)現(xiàn)A元素時序苏,執(zhí)行test01;如果沒有發(fā)現(xiàn)A元素時捷凄,執(zhí)行test02

from selenium.common.exceptions import NoSuchElementException, TimeoutException
class Tool(object):
    def __init__(self, driver):
        self.driver = driver  # 這里不能再文件頂部導入webdriver杠览,不然之后會有沖突
    def is_element_exit(self, identifyBy, c):
        '''
        Determine whether elements exist
        Usage:
        isElement(By.XPATH,"http://a")
        '''
        flag = None
        try:
            if identifyBy == "xpath":
                # self.driver.find_element_by_xpath(c)
                wait = WebDriverWait(self.driver, 3)
                wait.until(EC.presence_of_element_located((By.XPATH, c)))  # 等待該xpath元素最多3s,找到則返回元素纵势,否則拋異常
                # WebDriverWait(self.driver, 3, 0.8).until(lambda x: x.find_element_by_xpath(c))  # 等待XPATH元素可見 
            elif identifyBy == "id":
                self.driver.implicitly_wait(60)
                self.driver.find_element_by_id(c)
                self.driver.find_element_by_id(c).click()
            elif identifyBy == "name":
                 self.driver.find_element_by_name(c)
                 self.driver.find_element_by_name(c).click()
            flag = True
            print("can find: ", c)
        # except NoSuchElementException as e:
        except TimeoutException as e:
            flag = False
            print("獲取元素超時因為{}踱阿,無法找到{}元素", format(e, c))
            print("can't find: %s" % c)
        finally:
            return flag

調(diào)用這個方法

from common.tool import Tool

class TestEdrain(unittest.TestCase):
    def test_Flow(self):
            driver = self.driver
            driver.get(self.base_url)
            tool = Tool(driver)
            if tool.is_element_exit("xpath", '//*[@id="iptIDCard"]'):
                print("開始注冊")
                edrain.test01()
            else:
                print("開始登錄")
                edrain.test02()
 

TimeoutException:獲取元素超時

NoSuchElementException:找不到該元素

等異常均會被捕捉。

小tip:

# 最長的等待時間取決于兩者之間的大者钦铁。
# 如果隱性等待時間 > 顯性等待時間软舌,則該句代碼的最長等待時間等于隱性等待時間。
 """
implicitly_wait():隱式等待
 當使用了隱式等待執(zhí)行測試的時候牛曹,如果 WebDriver沒有在 DOM中找到元素佛点,將繼續(xù)等待,超出設定時間后則拋出找不到元素的異常黎比。換句話說超营,當查找元素或元素并沒有立即出現(xiàn)的時候,隱式等待將等待一段時間再查找 DOM阅虫,默認的時間是0
  一旦設置了隱式等待演闭,則它存在整個 WebDriver 對象實例的聲明周期中,隱式等待會讓一個正常響應的應用的測試變慢颓帝,它將會在尋找每個元素的時候都進行等待米碰,這樣會增加整個測試執(zhí)行的時間。
  所以:::隱式等待 慎用购城。
  """
---------
driver.implicitly_wait(30)  # 隱式等待
--------
wait = WebDriverWait(self.driver, 3)
wait.until(EC.presence_of_element_located((By.XPATH, c)))  # 顯示等待

四吕座、斷言

1、包含關系assertIn(A, B)------B 中包含 A

ele_string = driver.find_element_by_xpath('//*[@id="app"]/div/div/div[2]/div/div/div[1]/p[1]').text
assertIn(u"系統(tǒng)正在審批您提交的申請", ele_string)

2瘪板、相等關系assertEqual(A, B)------A和B相等

assertEqual(a,b,msg=msg)   #判斷a與.b是否一致吴趴,msg類似備注,可以為空
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末侮攀,一起剝皮案震驚了整個濱河市锣枝,隨后出現(xiàn)的幾起案子厢拭,更是在濱河造成了極大的恐慌,老刑警劉巖惊橱,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異箭昵,居然都是意外死亡税朴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門家制,熙熙樓的掌柜王于貴愁眉苦臉地迎上來正林,“玉大人,你說我怎么就攤上這事颤殴∶倮” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵涵但,是天一觀的道長杈绸。 經(jīng)常有香客問我,道長矮瘟,這世上最難降的妖魔是什么瞳脓? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮澈侠,結果婚禮上劫侧,老公的妹妹穿的比我還像新娘。我一直安慰自己哨啃,他們只是感情好烧栋,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拳球,像睡著了一般审姓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祝峻,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天邑跪,我揣著相機與錄音,去河邊找鬼呼猪。 笑死画畅,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的宋距。 我是一名探鬼主播轴踱,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谚赎!你這毒婦竟也來了淫僻?” 一聲冷哼從身側(cè)響起诱篷,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雳灵,沒想到半個月后棕所,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡悯辙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年琳省,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躲撰。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡针贬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拢蛋,到底是詐尸還是另有隱情桦他,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布谆棱,位于F島的核電站快压,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏垃瞧。R本人自食惡果不足惜嗓节,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望皆警。 院中可真熱鬧拦宣,春花似錦、人聲如沸信姓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽意推。三九已至豆瘫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間菊值,已是汗流浹背外驱。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腻窒,地道東北人昵宇。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像儿子,于是被迫代替她去往敵國和親瓦哎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 洞見SELENIUM自動化測試 寫在最前面:目前自動化測試并不屬于新鮮的事物,或者說自動化測試的各種方法論已經(jīng)層出...
    厲鉚兄閱讀 6,709評論 3 47
  • 這篇文章在介紹官網(wǎng)的同時使用了比較多的腳本示例蒋譬,示例里遇到的問題有部分在本篇文章進行了解釋割岛,還有一篇文章專門記錄了...
    顧顧314閱讀 12,899評論 3 32
  • 基于 SELENIUM 的自動化測試架構 非常感謝各位查閱本篇文章,筆者在此感謝各位犯助。 目前市面上有分門別類的自動...
    厲鉚兄閱讀 6,043評論 6 43
  • Selenium 官網(wǎng)Selenium WebDriver官網(wǎng)webdriver實用指南python版本 WebD...
    顧顧314閱讀 46,956評論 0 34
  • 專業(yè)考題類型管理運行工作負責人一般作業(yè)考題內(nèi)容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 8,977評論 0 13