Selenium2相關知識最全總結

1. 定位元素的幾種方法

    find_element_by_id(優先,常用),對應的是id屬性

    find_element_by_name(優先,常用),對應的是name屬性

    find_element_by_class_name,對應的是class屬性的值

    find_element_by_tag_name,對應的是標籤名稱,如input,p,span,title,body....

    find_element_by_link_text,對應的是超鏈接的文本內容

    find_element_by_partial_link_text,對應的是部分超鏈接的文本內容

    find_element_by_xpath,對應的是元素的path,可通過firebug工具獲得

    find_element_by_css_selector,通過css屬性定位,class用.  id用#,

         示例:

             driver.find_element_by_css_selector(".s_ipt").send_keys("selenium")

             driver.find_element_by_css_selector("#su").click()


2.By定位

    find_element(By.ID,"kw")

    find_element(By.NAME,"wd")

    find_element(By.CLASS_NAME,"s_ipt")

    find_element(By.TAG_NAME,"input")

    find_element(By.LINK_TEXT,u"新聞")

    find_element(By.PARTIAL_LINK_TEXT,u"新")

    find_element(By.XPATH,"//*[@class='bg s_btn']")

    find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su") 


3.幾種瀏覽器操作

    說明:操作瀏覽器需要將瀏覽器插件目錄放入環境變量中,不然找不到

    from selenium import webdriver

    driver = webdriver.Ie()        --IE瀏覽器,插件名爲   IEDriverServer.exe

    driver = webdriver.Firefox()   -- 火狐瀏覽器,插件名爲  geckodriver.exe

    driver = webdriver.Chrome()  -- 谷歌瀏覽器,插件名爲  chromedriver.exe

    driver = webdriver.Edge()      --Edge瀏覽器(windows10系統自帶), 無需插件

    操作360瀏覽器:

       360瀏覽器內核基於chrome瀏覽器,因此插件用的也是chromedriver.exe,不過得配置下

        chrome_options = webdriver.ChromeOptions()

        chrome_options.binary_location = r"C:\Users\kevin\AppData\Roaming\360se6\Application\360se.exe" #這裏是360安全瀏覽器的路徑

        chrome_options.add_argument(r'--lang=zh-CN') # 這裏添加一些啓動的參數

        d = webdriver.Chrome(chrome_options=chrome_options)

   

4.控制瀏覽器

   設置寬高:driver.set_window_size(400,500),  ------設置寬400,高500

   設置全屏:driver.maximize_windows()

   前進:driver.forward()

   後退:  driver.back()

   刷新當前頁面:driver.refresh()

   

5.定位到的元素操作

   driver.find_element_by_xx('xx').click()              --點擊操作

   driver.find_element_by_xx('xx').clear()             --清除操作,清除文本框中的內容

   driver.find_element_by_xx('xx').send_keys('123')     --輸入數據到文本框

   driver.find_element_by_xx('xx').submit()         --提交操作,相當於回車,如在搜索框中輸入內容後,執行此方法,可直接執行搜索動作

   driver.find_element_by_xx('xx').size()              --獲取元素的尺寸

   driver.find_element_by_xx('xx').text                --獲取元素的文本

   driver.find_element_by_xx('xx').get_attribute('id')   --獲取id屬性,只要是屬性都可通過此方法獲取,如name,id,type,class.

   driver.find_element_by_xx('xx').is_displayed()    --獲取元素是否可見,可見返回True,否則False

   

6.鼠標事件

   Actions類中提供了鼠標操作的常用方法

   perform()                               --執行所有Actions類中存儲的行爲

   context_click()                       --右擊

   double_click()                        --雙擊

   drap_and_drop()                   --拖動

   move_to_element                 --懸停


  調用示例:

     context_click()       

from selenium.webdriver.common.action_chains ActionChains

driver = webdriver.Ie()
right_click = driver.find_element_by_id()
ActionChains(driver).context_click(right_click).perform()

    其他的方法調用同上,只是改下方法而已


7.鍵盤操作

   模擬組合鍵 CTRL+A,CTRL+C等等

   from selenium.webdriver.common.keys import Keys

   退格鍵 Keys.BACK_SPACE             ---  driver.find_elemennt_by_id('').send_keys(Keys.BACK_SPACE)

   空格鍵Keys.SPACE                        ---  driver.find_elemennt_by_id('').send_keys(Keys.SPACE)

   輸入CTRL+A                                 ---  driver.find_elemennt_by_id('').send_keys(Keys.CONTROL,'a')

   回車鍵                                           ---  driver.find_elemennt_by_id('').send_keys(Keys.ENTER)


8.設置元素等待

   顯式等待:

            一直檢測並等待某個元素出現或消失,達到最大時長條件還未成立則拋出超時異常

           from selenium import webdriver

           from selenium.webdriver.support.ui import WebDriverWait

           from selenium.webdriver.support import expected_conditions as EC

           driver = webdriver.Ie()
           driver.get("https://www.baidu.com")

            element = WebDriverWait(driver,5,0.5).until(

                              EC.presence_of_ element_located((By.id,"kw"))     

               )

           element.send_keys('hello')

           5:表示最長等待時間

           0.5:檢測間隔時間,也就是隔多長時間檢測一次,單位秒

           until:直到括號中條件成立,也存在until not

    隱式等待:

            driver.implicitly_wait(10),單位爲秒,不設置默認爲0,一般寫在用例開頭,針對整條用例有效,在定位一個元素時,如果元素未加載出來,則定位不到。此方              法會在設定時間內一直檢測,檢測到了就向下進行,否則就拋出超時異常

    sleep休眠:

             強制等待一段時間

             import time

             time.sleep(10)


9.定位一組元素

   find_elements_by_xx,同定位單個元素一樣,不過element是elements

   示例:勾選全部checkbox

    checkboxs = driver.find_elements_by_tag_name("input")

    for checkbox in checkboxs:

          if checkbox.get_attribute("type") == "checkbox":

              checkbox.click() 


10.操作下拉選擇框

   方法:

      選擇:

           select_by_index()   --通過索引

           select_by_value()   --通過value值

           select_by_visiable_text()  --通過顯示的文本

      反選:

           deselect_by_index()   --通過索引

           deselect_by_value()   --通過value值

           deselect_by_visiable_text()  --通過顯示的文本

           deselect_all()              --取消選擇所有

     示例:

                  <select id="sid">

                                  <option></option>

                                  <option value="o1" id="id1">顯示文本1</option>

                                  <option value="o2" id="id2">顯示文本2</option>

                                  <option value="o3" id="id3">顯示文本3</option>

                   </select>

                   

                   選擇示例:

                        select_by_index(1)   --通過索引

                        select_by_value('o2' )   --通過value值

                        select_by_visiable_text('顯示文本2')  --通過顯示的文本

                        

                  完整示例:

                  from selenium.webdriver.support.ui import Select

                  select = Select(driver.find_element_by_id("sid"))

                  select.select_by_index(1)

                  

11. 多表單切換

      

      許多頁面存在表單嵌套情況,從一個表單是無法直接定位到其他表單中元素的,需要進行表單切換

      f = driver.find_element_by_id("fr")   --定位到id爲fr的表單,定位方法通用 

      driver.switch_to.frame(f)     ---切換到id爲fr的表單中

      操作完成後跳到最外層表單: driver.switch_to.default_content()

      

12.多窗口切換

      獲取當前窗口的handle:   current_handle = driver.current_window_handle

      獲取所有窗口handle:    handles = driver.window_handles

      切換到其他窗口

      for hand in handles:

             if hand != current_handle:

                 driver.swith_to.window(hand)           --切換窗口

                 

13.彈窗處理

      針對alert,prompt,confirm出現的彈窗,可使用driver.switch_to_alert()進行捕獲並處理

      方法:

           text                            --返回彈窗的文本信息

           accept(),                   --接受彈窗,也就是點擊確定

           dismiss()                  --取消彈窗

                  

      調用示例:

             driver.switch_to_alert().accept()          --點擊確定

             

14.上傳文件

      方法一:直接通過send_keys()方法輸入文件路徑到文本框中,點擊提交按鈕

      方法二:通過AutoIt工具,將操作過程打包成exe文件,然後通過python進行調用

      

15.操作cookie

     獲取所有cookie:                          driver.get_cookies()

     獲取名爲xx的cookie:                   driver.get_cookie('xx')

     添加cookie:                                 driver.add_cookie(dict)    -- 參數爲字典對象

     刪除所有cookie:                          driver.delete_all_cookies()

     

16.調用JavaScript

      js = "window.scrollTo(100,450);"

      driver.execute_script(js)

      

17.處理HTM5視頻播放

     示例:

         video = driver.find_element_by_xpath("body/Section[1]/div/video")

         driver.execute_script("return arguments[0].play()",video)                          --播放

         driver.execute_script("return arguments[0].pause()",video)                       --暫停

          


18.窗口截圖


      driver.get_screenshot_as_file("D:\xxx\xx.png")


19.關閉窗口


    driver.close()  ---關閉當前窗口

    driver.quit()    ---關閉所有窗口


20.驗證碼處理

     1.去掉驗證碼

     2.設置萬能驗證碼

     3.使用cookie

     4.驗證碼識別

     5.驗證碼存放在cookie中   


   

 

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