日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

selenium+python面试题目总结,完整度80%,看看你会多少?

發布時間:2024/9/30 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 selenium+python面试题目总结,完整度80%,看看你会多少? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. WebDriver原理

webDriver是按照client/server模式設計,client就是我們的測試代碼,發送請求,server就是打開的瀏覽器來打開client發出的請求并做出響應。

具體的工作流程:

·webdriver打開瀏覽器并綁定到指定端口。啟動的瀏覽器作為remote server.

·client通過commandExecuter發送httpRequest給remote server的的偵聽端口(the webdriver wire control通信協議)

·Remote server根據原生的瀏覽器組件來轉化為瀏覽器的native調用。

備注:啟動瀏覽器的時候,使用的是http: hyper test transfer protocol

這里有我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、 爬蟲、數據分析、數據可視化、機器學習等。 小編這里推薦加小編的python學習群:895,817, 687

2. Selenium 特點和組成

Selenium是一個針對web應用的開源測試框架,它的測試用例可以用html table或者html 代碼或者編程語言進行開發,而且他能在幾乎所有的現在的瀏覽器上執行。Selenium可以被部署到windows.linux.mac平臺上,支持的語言有java/python/ruby/.net/perl

特點:

  • 支持錄制回放
  • 多種方式對頁面元素進行定位并操作
  • 能夠及進行debug和設置斷點
  • 能夠把測試腳本保存成html/ruby或者其他語言
  • 支持user-extensions.js形式的用戶擴展
  • 能夠進行頁面的斷言
  • Selenium IDE: 是firefox的插件,可以錄制/回放/測試腳本

  • Selenium RC:支持程序語言(java/C#/python/ruby)編寫測試用例; selenium和其他測試框架集成,比如java環境下將selenium和Junit集成,利用selenium來書寫測試用例,用Junit來實現測試用例的自動化運行。

  • Selenium Core:是selenium的核心,是有js和html文件組成,它是selenium IDE和selenium RC的核心引擎。

  • Selenium Grid:是selenium的擴展,可以將一批selenium腳本分配到不同的測試機上同步運行。即selenium grid可以在不同的主機上建立主節點(hub)和分支節點(node), 可以使主節點上的測試用例在不同的分支節點上運行。對于不同的節點來說,可以搭建不同的測試環境(操作系統/瀏覽器)。

  • 3. 如何提高自動化腳本穩定性

    找原因

    1)網速原因,增加時間等待

    2)函數原因,盡量少使用容易沖突的函數

    3)配置testNG實現多線程,在編寫測試用例的時候,一定要實現松耦合,在服務器允許的情況下盡量設置多線程運行,提高執行速度。

    4. 高質量自動化腳本特點

    業務和代碼分離,封裝型好。

    自動化用例耦合性低,獨立性強,易于擴展維護

    5. 自動化測試缺陷

    不穩定

    可靠性不強

    不易維護

    成本與收益

    6. 自動化用例的執行策略

    根據自動化執行的目的來決定

    (1)自動化測試用例執行用來監控,可以設置用例定時執行;

    (2)用于回歸測試,可以把測試用例設置成觸發式執行;

    (3)不需要經常執行的測試用例,可以由人工執行。

    7. 提高selenium腳本的執行速度方式

    (1)減少操作步驟,減少不必要的操作;

    (2)中斷頁面加載,如果頁面加載內容過多并且加載的內容不影響我們測試,可以設置超時時間,中斷頁面加載;

    (3)設置等待時間的時候,可以sleep()固定的時間,檢測到元素出現后中斷等待也可以提高速度;

    (4) 配置testNG實現多線程,在編寫測試用例的時候,一定要實現松耦合,在服務器允許的情況下盡量設置多線程運行,提高執行速度。

    8. 元素定位

  • Id定位
  • find_element_by_id(‘kw’) //通過id屬性定位

  • Name定位
  • find_element_by_name(‘wd’) //通過名字進行定位,名字一般不唯一,一般不能 通 過其定位

  • ClassName定位
  • find_element_by_class_name(‘cn’) //通過類名進行定位

  • TagName定位
  • find_element_by_tag_name(‘input’) //標簽,一般用于一類元素的定位

  • LinkText定位
  • find_element_by_link_text(‘新聞’) //文本鏈接定位

  • PartialLinkText定位
  • find_element_by_partial_link_text(‘一個很長的’) //文本鏈接的部分文字

  • 絕對路徑定位
  • find_element_by_xpath(‘/html/body/div/div[2]/form/span/input[2]’) //絕對地址定位, 利用層級定位

    find_element_by_xpath(‘//input[@name=’n’ and id=’kw’]’) //當前頁面某個目錄下 name為n,id為kw的input標簽,利用元素屬性進行定位

    find_element_by_xpath(‘//[@id=kw]’) //其中表示任何屬性,表示id為kw的任何屬 性的元素

    find_element_by_xpath(‘//span[@class=’c’]/input’) //層級和屬性結合進行定位

    find_element_by_xpath(‘//a[contains(href , ’test’)]’)

  • 相對路徑定位
  • 相對路徑定位一般比絕對路徑定位快。

    find_element_by_css_selector(‘.class1’) // 類名定位 .class

    find_element_by_css_selector(‘#id’) //id定位 #id

    find_element_by_css_selector(‘input’) // 標簽名定位

    find_element_by_css_selector(‘[autocomplete=off]’) //屬性定位

    find_element_by_css_selector(‘span>input’) //標簽名為span的input子元素

  • 定位一組元素
  • Checkboxes = find_elements_by_tag_name(‘checkbox’)

    for checkbox in Checkboxes:

    checkbox.click() # 通過for循環全選所有的checkbox

    Checkboxes.pop().click() #取消勾選一些checkbox,pop(-1)=pop()表示一組元素的最后一個;pop(0) 表示一組元素的第一個,pop(1)表示一組元素的第二個,以此類推

  • 父子/兄弟/相鄰節點的定位
  • ·父->子

    Find_element_by_id(‘parent’).find_element_by_tag_name(‘input’) 串聯尋找

    Find_element_by_xpath(‘//input/div[@name=’n’]/span/input[1]’) xpath的層級

    Find_element_by_css_selector(‘div#b>input’) css selector的父子關系

    ·子->父

    Find_element_by_xpath(‘//div[@id=’c’]/…/…’) 其中//div[@id=’c’]的父親的父親

    ·哥哥->弟弟

    Find_element_by_xpath(‘//div[@id=’c’’/…/div[1]) 找到弟弟后找父親然后找哥哥

    Find_element_by_css_selector(‘div#d+div’) 表示id=d的div后面緊跟著的div

    Find_element_by_css_selector(‘div#d~div’) 表示id=d的div后面同一級所有div

  • 二次定位
  • Element1 = driver.find_element_by_id(‘ID1’)

    Element2 = Element1.find_element_by_id(‘ID2’)

  • display: none 和hidden的區別
  • 共同點:把網頁中的某個元素隱藏起來;他們在selenium中都是定位不到的。

    區別:display:none不為隱藏的對象保留其物理空間,該對象在這個頁面上徹底消失,看不到/摸不到;hidden使對象在網頁上不可見,但該對象在網頁中依然占有空間,看不到/摸得到。

    備注:isElementPresent()來判斷元素是否存在。

    9. 常見控件使用

  • link/button:
  • element.click()

    注:ajax不能使用clickAndWait()函數,因為cickAndWait函數會在click之后等待頁面重新加載完成,而ajax是部分刷新,所以這個頁面不能重新加載完成。

  • Textbox:
  • element.send_keys(‘test’)

  • Upload
  • Driver.find_element_by_id(‘id’).send_keys(‘D\test.txt’)

  • Mouse Event:
  • e1=driver.find_element_by_id(‘kw’)

    ActionChains(driver).double_click()/.context_click()/.drag_and_drop()/.move_to_eleme nt()/.perform() # 雙擊/右擊/拖動/懸停/執行actionChains中的行為

  • Dropdown:
  • ·標簽的下拉菜單

    from selenium.webdriver.support.ui import Select

    Select(driver.find_element_by_id(‘gender’)).select_by_index(1)

    Select(driver.find_element_by_id(‘gender’)).select_by_value(“2”)

    Select(driver.find_element_by_id(‘gender’)).select_by_visible_text(“Male”)

    ·非標簽的下拉菜單

    Dropdown1 = driver.find_element_by_id(‘id’) #先定位到dropdown

    Dropdown1.find_element_by_id(“li2_input_2”) #再定位到dropdown中的值

  • Alert:
  • driver.switch_to.alert.accept()//接受

    driver.switch_to.alert.dismiss() //取消

    Message=driver.switch_to.alert.text //獲取彈窗的文本消息

    driver.switch_to.alert.send_keys(‘hello’) //輸入值,這個在alert和confirm中不可用

  • Window
  • Driver.refresh() 刷新

    Driver.back() 后退

    Driver.forward() 前進

    Driver.maximize_window() 最大化

    Driver.set_window_size(100,200) 設置窗口大小

    Driver.switch_to.window(searchwindow)

  • Frame
  • Driver.switch_to.frame(ReferenceFrame)

    Driver.switch_to.parent_frame() # frame需要一級一級切

    Driver.switch_to.default_content()

    11. 等待

  • 顯式等待
  • 等待某個條件成立時繼續執行,每隔一段時間進行檢測,超出最大時間 則拋出異常(程序每隔X秒看一眼,如果條件成立,執行下一步,否則等待,超出最大 時間,拋出異常)

    From selenium.webdriver.common.by import By

    From selelnium.webdirver.support.ui import WebDriverWait

    From selenium.webdriver.support import expected_conditions as EC

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

    EC.presence_of_element_located( (By.ID, ‘kw’) )

    )

  • 隱式等待
  • 隱式等待中的時間并非一個固定的等待時間,它并不影響腳本的執行速度。比如進行某元素的定位時,如果元素可以定位就繼續執行,如果目前定位不到就以輪詢的方式持續判斷該元素是否被定位到,如果超過規定的時間還沒定位到就拋出異常。(甲約乙去吃飯,甲在這里等著,等了10分鐘乙到達,則從10分鐘之后開始下一步,假如等了20分鐘,則20分鐘后開始下一步,如果到了最大時間30分鐘還沒到就拋異常)

    driver.implicitly_wait(20)

  • 強制等待
  • From time import sleep

    Sleep(2)

    12. 截圖

    driver.get_screenshot_as_file(‘E:\sc.jpg’)

    13. 線性測試

    開發維護成本高

    14. 模塊化驅動測試

    將重復的操作獨立為公共模塊,盡量消除重復,提高測試用例的可維護性。

    15. 數據驅動測試

    數據參數化

  • 讀取txt文件
  • File= open(‘E:\wtest.txt’, ‘r’)

    Lines = File.readlines()

    For line in lines:

    User = line.split(‘,’)[0]

    Passw=line.split(‘,’)[1]

    Print(User, Passw)

  • 讀取csv文件
  • UnicodeDecodeError (未找到解決方案)

  • 讀取xml文件
  • 16. 關鍵字驅動測試

    腳本/數據/業務 分離

    17. page object設計模式

    是將page對象封裝成一個HTML頁面,通過提供的應用程序特定的API來操作頁面元素,而不是在html中來搜尋對象,即提供一個易于編程的接口并隱藏窗口中底層的部件,對界面的交互細節進行封裝。

    優點是:減少了代碼的重復/提高測試用例的可讀性/提高測試用例的可維護性(特別是UI頻繁變化的項目)

    page object設置模式中,不需要在page里定位的方法中加上斷言(why)

    18. Assert斷言

    斷言的英文是assertion,斷言檢查的英文是assertion checking。

    -斷言是指定一個程序必須已經存在的狀態的一個邏輯表達式,或者一組程序變量在程序執行期間的某個點上必須滿足的條件。

    Assert判斷如果出現錯誤,則會中斷整個測試;使用verify進行判斷如果出現錯誤仍會繼續執行直到結束。

    總結

    以上是生活随笔為你收集整理的selenium+python面试题目总结,完整度80%,看看你会多少?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。