1. 程式人生 > >python Selenium 常見操作 元素定位

python Selenium 常見操作 元素定位

一. 定位元素方法

  • find_element_by_id
  • find_element_by_name
  • find_element_by_xpath
  • find_element_by_link_text
  • find_element_by_partial_link_text
  • find_element_by_tag_name
  • find_element_by_class_name
  • find_element_by_css_selector
        下面是查詢多個元素(這些方法將返回一個列表):
  • find_elements_by_name
  • find_elements_by_xpath
  • find_elements_by_link_text
  • find_elements_by_partial_link_text
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector

        除了上面給出的公共方法,這裡也有兩個在頁面物件定位器有用的私有方法。這兩個私有方法是find_element和find_elements。
        常用方法是通過xpath相對路徑進行定位,同時CSS也是比較好的方法。舉例:

  1. <html>
  2.  <body>
  3.   <formid="loginForm">
  4.    <
    inputname="username"type="text"/>
  5.    <inputname="password"type="password"/>
  6.    <inputname="continue"type="submit"value="Login"/>
  7.    <inputname="continue"type="button"value="Clear"/>
  8.   </form>
  9. </body>
  10. <html>
        定位username元素的方法如下:
  1. username = driver.find_element_by_xpath(
    "//form[input/@name='username']")  
  2. username = driver.find_element_by_xpath("//form[@id='loginForm']/input[1]")  
  3. username = driver.find_element_by_xpath("//input[@name='username']")  
        [1] 第一個form元素通過一個input子元素,name屬性和值為username實現
        [2] 通過id=loginForm值的form元素找到第一個input子元素
        [3] 屬性名為name且值為username的第一個input元素

二. 操作元素方法

        在講述完定位物件(locate elements)之後我們需要對該已定位物件進行操作,通常所有的操作與頁面互動都將通過WebElement介面,常見的操作元素方法如下:

  • clear 清除元素的內容
  • send_keys 模擬按鍵輸入
  • click 點選元素
  • submit 提交表單

        舉例自動訪問FireFox瀏覽器自動登入163郵箱。

  1. from selenium import webdriver    
  2. from selenium.webdriver.common.keys import Keys    
  3. import time  
  4. # Login 163 email
  5. driver = webdriver.Firefox()    
  6. driver.get("http://mail.163.com/")  
  7. elem_user = driver.find_element_by_name("username")  
  8. elem_user.clear  
  9. elem_user.send_keys("15201615157")    
  10. elem_pwd = driver.find_element_by_name("password")  
  11. elem_pwd.clear  
  12. elem_pwd.send_keys("******")    
  13. elem_pwd.send_keys(Keys.RETURN)  
  14. #driver.find_element_by_id("loginBtn").click()
  15. #driver.find_element_by_id("loginBtn").submit()
  16. time.sleep(5)    
  17. assert"baidu"in driver.title    
  18. driver.close()    
  19. driver.quit()    
        首先通過name定位使用者名稱和密碼,再呼叫方法clear()清除輸入框預設內容,如“請輸入密碼”等提示,通過send_keys("**")輸入正確的使用者名稱和密碼,最後通過click()點選登入按鈕或send_keys(Keys.RETURN)相當於回車登入,submit()提交表單。
        PS:如果需要輸入中文,防止編碼錯誤使用send_keys(u"中文使用者名稱")。

三. WebElement介面獲取值

        通過WebElement介面可以獲取常用的值,這些值同樣非常重要。

  • size 獲取元素的尺寸
  • text 獲取元素的文字
  • get_attribute(name) 獲取屬性值
  • location 獲取元素座標,先找到要獲取的元素,再呼叫該方法
  • page_source 返回頁面原始碼
  • driver.title 返回頁面標題
  • current_url 獲取當前頁面的URL
  • is_displayed() 設定該元素是否可見
  • is_enabled() 判斷元素是否被使用
  • is_selected() 判斷元素是否被選中
  • tag_name 返回元素的tagName

        舉例程式碼如下:

  1. from selenium import webdriver    
  2. from selenium.webdriver.common.keys import Keys    
  3. import time  
  4. driver = webdriver.PhantomJS(executable_path="G:\phantomjs-1.9.1-windows\phantomjs.exe")     
  5. driver.get("http://www.baidu.com/")  
  6. size = driver.find_element_by_name("wd").size  
  7. print size  
  8. #尺寸: {'width': 500, 'height': 22}
  9. news = driver.find_element_by_xpath("//div[@id='u1']/a[1]").text  
  10. print news  
  11. #文字: 新聞
  12. href = driver.find_element_by_xpath("//div[@id='u1']/a[2]").get_attribute('href')  
  13. name = driver.find_element_by_xpath("//div[@id='u1']/a[2]").get_attribute('name')  
  14. print href,name  
  15. #屬性值: http://www.hao123.com/ tj_trhao123
  16. location = driver.find_element_by_xpath("//div[@id='u1']/a[3]").location  
  17. print location  
  18. #座標: {'y': 19, 'x': 498}
  19. print driver.current_url  
  20. #當前連結: https://www.baidu.com/
  21. print driver.title  
  22. #標題: 百度一下, 你就知道
  23. result = location = driver.find_element_by_id("su").is_displayed()  
  24. print result  
  25. #是否可見: True
        其中圖片解釋如下圖所示。

四. 滑鼠操作

        在現實的自動化測試中關於滑鼠的操作不僅僅是click()單擊操作,還有很多包含在ActionChains類中的操作。如下:

  • context_click(elem) 右擊滑鼠點選元素elem,另存為等行為
  • double_click(elem) 雙擊滑鼠點選元素elem,地圖web可實現放大功能
  • drag_and_drop(source,target) 拖動滑鼠,源元素按下左鍵移動至目標元素釋放
  • move_to_element(elem) 滑鼠移動到一個元素上
  • click_and_hold(elem) 按下滑鼠左鍵在一個元素上
  • perform() 在通過呼叫該函式執行ActionChains中儲存行為
        舉例如下圖所示,獲取通過滑鼠右鍵另存為百度圖片logo。程式碼:
  1. import time  
  2. from selenium import webdriver  
  3. from selenium.webdriver.common.keys import Keys  
  4. from selenium.webdriver.common.action_chains import ActionChains  
  5. driver = webdriver.Firefox()  
  6. driver.get("http://www.baidu.com")  
  7. #滑鼠移動至圖片上 右鍵儲存圖片
  8. elem_pic = driver.find_element_by_xpath("//div[@id='lg']/img")  
  9. print elem_pic.get_attribute("src")  
  10. action = ActionChains(driver).move_to_element(elem_pic)  
  11. action.context_click(elem_pic)  
  12. #重點:當右鍵滑鼠點選鍵盤游標向下則移動至右鍵選單第一個選項
  13. action.send_keys(Keys.ARROW_DOWN)  
  14. time.sleep(3)  
  15. action.send_keys('v'#另存為
  16. action.perform()  
  17. #獲取另存為對話方塊(失敗)
  18. alert.switch_to_alert()  
  19. alert.accept()  

        效果如下圖所示,通過xpath定位到圖片位置並右擊滑鼠,在彈出的選單中選擇“另存為圖片”。但是如何點選“另存為對話方塊”的“儲存”按鈕是個難點,目前剛學習階段,境界沒到無法解決。原因:
        WebDriver cannot directly interact with dialog windows this is because dialog windows are the domain of the operating system and not the webpage.

五. 鍵盤操作

        參考:http://selenium-python.readthedocs.org/api.html
        前面講述了滑鼠操作,現在講述鍵盤操作。在webdriver的Keys類中提供了鍵盤所有的按鍵操作,當然也包括一些常見的組合鍵操作如Ctrl+A(全選)、Ctrl+C(複製)、Ctrl+V(貼上)。更多鍵參考官方文件對應的編碼。

  • send_keys(Keys.ENTER) 按下回車鍵
  • send_keys(Keys.TAB) 按下Tab製表鍵
  • send_keys(Keys.SPACE) 按下空格鍵space
  • send_keys(Kyes.ESCAPE) 按下回退鍵Esc
  • send_keys(Keys.BACK_SPACE) 按下刪除鍵BackSpace
  • send_keys(Keys.SHIFT) 按下shift鍵
  • send_keys(Keys.CONTROL) 按下Ctrl鍵
  • send_keys(Keys.ARROW_DOWN) 按下滑鼠游標向下按鍵
  • send_keys(Keys.CONTROL,'a') 組合鍵全選Ctrl+A
  • send_keys(Keys.CONTROL,'c') 組合鍵複製Ctrl+C
  • send_keys(Keys.CONTROL,'x') 組合鍵剪下Ctrl+X
  • send_keys(Keys.CONTROL,'v') 組合鍵貼上Ctrl+V

        這裡使用的例子參考蟲師的書籍《selenium2 Python自動化測試》,推薦該書給大家。程式碼還是非常有意思的,大家自己去感受下吧~

  1. #coding=utf-8
  2. import time  
  3. from selenium import webdriver  
  4. from selenium.webdriver.common.keys import Keys  
  5. driver = webdriver.Firefox()  
  6. driver.get("http://www.baidu.com")  
  7. #輸入框輸入內容
  8. elem = driver.find_element_by_id("kw")  
  9. elem.send_keys("Eastmount CSDN")  
  10. time.sleep(3)  
  11. #刪除一個字元CSDN 回退鍵
  12. elem.send_keys(Keys.BACK_SPACE)  
  13. elem.send_keys(Keys.BACK_SPACE)  
  14. elem.send_keys(Keys.BACK_SPACE)  
  15. elem.send_keys(Keys.BACK_SPACE)  
  16. time.sleep(3)  
  17. #輸入空格+"部落格"
  18. elem.send_keys(Keys.SPACE)  
  19. elem.send_keys(u"部落格")  
  20. time.sleep(3)  
  21. #ctrl+a 全選輸入框內容
  22. elem.send_keys(Keys.CONTROL,'a')  
  23. time.sleep(3)  
  24. #ctrl+x 剪下輸入框內容
  25. elem.send_keys(Keys.CONTROL,'x')  
  26. time.sleep(3)  
  27. 相關推薦

    python Selenium 常見操作 元素定位

    一. 定位元素方法 find_element_by_idfind_element_by_namefind_element_by_xpathfind_element_by_link_textfind_element_by_partial_link_textfind_ele

    【轉載】【selenium+Python WebDriver】之元素定位

    driver 轉載 ref tails selenium html http url 定位 總結: 感謝“煜妃”《Selenuim+Python之元素定位總結及實例說明》和“Huilaojia123”《selenium WebDriver定位元素學習總結》的文章【轉載】【s

    初學者的Selenium自動化測試指南,基於Python(一)——元素定位

        WebDriver是Selenium體系中設計出來操作瀏覽器的一套API,可支援多種程式語言,對於Python來說,可以將WebDriver視為Python的一個用於實現Web自動化的第三方類庫。WebDriver一共提供了八種元素定位方法,我們以百度輸入框和百度搜

    Selenium+Python之八種元素定位方法

    如有疑問,可以留言或私信問我喲~ 一、id定位 driver.find_element_by_id("txtUaserName").send_keys("容音@lily") 二、name定位 driver.find_element_by_name("username"

    Selenium(2): DOM元素定位操作

    DOM 元素定位 定位過程 WebDriver物件的findElement函式定義一個Web頁面元素;findElements方法可以定位頁面的多個元素;使用WebElement物件來儲存定位的元

    python+selenium基礎之XPATH定位

    方式 沒有 基礎 元素 w3c com pytho round con 世界上最遠的距離大概就是明明看到一個頁面元素矗在那裏,但是我卻定位不到!! selenium定位元素的方法有很多種,像是通過id、name、class_name、tag_name、link_text

    python+selenium常見問題解決方式

    exce driver class windows OS alt har ror clas 1、啟動不了瀏覽器,報錯如下: ============================= ERRORS =============================Traceback

    selenium 訊息框元素定位處理

    以下內容來自於“風少”的部落格 《元素定位:selenium訊息框處理 (alert、confirm、prompt)》   基礎普及 alert對話方塊 。細分三種,Alert,prompt,confirm 1. alert() 彈出個提示框 (確定) 警告訊息框 alert 方法有一個引數

    三、Appium-python-UI自動化之元素定位uiautomatorviewer

    uiautomatorviewer是android-sdk自帶的一個元素定位工具,非常簡單好用,使用uiautomatorviewer,可以檢查一個應用的UI來檢視應用的佈局和元件以及相關的屬性。   一、執行uiautomatorviewer.bat   1.開啟F:\Android\and

    selenium + java 列表元素定位 新聞列表為例

    想要定位列表中的元素 需要用到<List>集合 如圖,紅框標註處,是要定位的元素 如何實現  程式碼如下 :     public class FinElements { public static void main

    Appium+Python 自動化-appium常用元素定位方法

    1. ID定位 # resourceId屬性的方法 driver.find_element_by_id('com.lizi.app:id/setting_imageView').click() #以accessibility_id進行定位,對Android而言,就是co

    selenium基礎:元素定位之css_selector和軸定位

      selenium提供了非常豐富的元素定位方式,下面一張思維導圖是我根據工作經驗總結的定位元素方式,還是比較全的       本篇部落格重點介紹css_selector定位和軸定位  一 軸定位 軸名稱 ancestor:祖先節點,

    python+selenium常見例項-如何從TXT文件中讀取使用者資訊

    1、分開成每一條,然後轉化成字典 confg=open的檔案 for line in config: 每行進行分割---------例如下面,根據=分割,並且列表解析,防止有回車 result=【ele.strip( ) for ele in line.split

    selenium+java二元素定位

    頁面元素定位是自動化中最重要的事情, selenium Webdriver 提供了很多種元素定位的方法。  測試人員應該熟練掌握各種定位方法。 使用最簡單,最穩定的定位方法。 自動化測試步驟 定位元素》操作元素》驗證操作結果》記錄測試結果 在自動化測試過程中, 測試程式通常的操作頁面元素步驟

    python+selenium之封裝元素的方法(封裝查詢元素的方法)

    import os import sys import time import unittest from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait

    python+selenium-基本操作

    時間問題 (1)強制等待 sleep(3) 不管瀏覽器是否載入完,程式都必須等3秒再執行 (2)隱性等待 implicity_wait(6) 若在3秒定位到了元素則繼續執行,若超出6s時間,還沒有定位到元素,就丟擲異常 隱性等待對整個driver的週期都起作用,

    selenium+Java頁面元素定位方法

    頁面元素定位方法總結 WebDriver物件的findElement函式可以用於定位一個頁面的元素,findElement可以用於定位多個頁面的元素,定位到頁面元素需使用webElement物件進行儲存,以便在測試的過程中繼續使用。 定位方法

    Selenium IDE XPath元素定位

    資源推薦: XPath選擇器 XPath 是一門在 XML 文件中查詢資訊的語言,可用來在 XML 文件中對元素和屬性進行遍歷,並且XPath 是 W3C XSLT(Extensible Stylesheet Language Transformations)

    python+selenium常見例項-根據日曆進行查詢(上)

    一、思路: 1、查詢日曆元素; 2;設定日曆時間; 3、查詢搜尋元素; 4、點選搜尋按鈕; 5、檢視列表元素 6、列印列表中的資訊 7、判斷日期是否正確 二、重難點 1、設定日曆時間 2、列印所查詢的列表中的資訊 三、解決辦法 日曆設定:請參考該連結:https://bl

    Python字串常見操作

     先初始化一個字串scString scString = "my name is shenchong shen shen" find: scString = "my name is shenchong shen shen" print(scString.find("s