天天看點

Selenium自動化測試第一天(上)

如有任何學習問題,可以添加作者微信:lockingfree

目錄

  • Selenium自動化測試基礎
  • Selenium自動化測試第一天(上)
  • Selenium自動化測試第一天(下)
  • Selenium自動化測試第二天(上)
  • Selenium自動化測試第二天(下)

Selenium是一款浏覽器自動化架構,Webdriver是其核心,同過Webdriver将自動化腳本轉化為浏覽器操作指令。

一般操作邏輯為:

  1. 打開網頁
  2. 定位頁面元素(連結,按鈕,輸入框等)
  3. 操作頁面元素(點選,輸入)
  4. 定位并操作下一個頁面元素

Webdriver的工作原理

Webdriver會在本地啟動一套WebService服務并綁定一個動态端口,腳本運作時通過selenium将請求發送到Webdriver服務端,然後經過不同的浏覽器驅動,轉換為浏覽器指令。

浏覽器基本操作

  • 方法
    • get():打開網頁
    • forward():前進
    • back(): 後退
    • refresh(): 重新整理頁面
    • maximize_window():最大化視窗
    • set_window_size():設定視窗大小
    • close(): 關閉目前頁面
    • quit(): 退出浏覽器
  • 屬性
    • title:标題
    • current_url:目前網址
    • page_source:網頁源代碼

      示例:

from selenium import webdriver
from time import sleep

browser = webdriver.Chrome()  # 打開Chrome
# browser = webdriver.Firefox()  # 打開Firefox
# browser = webdriver.Edge()  # 打開Edge
# browser = webdriver.Ie()  # 打開Ie

browser.get("http://www.baidu.com") # 打開網頁
browser.maximize_window()  # 視窗最大化
print(browser.title)  # 目前頁面的标題
print(browser.current_url)  # 目前url
print(browser.page_source)  # 網頁源代碼
sleep(1)
browser.get("http://115.28.108.130/control.html")
sleep(1)
browser.back()  # 後退
sleep(1)
browser.forward()  # 前進
browser.refresh()  # 重新整理

sleep(3)
browser.quit()  # 退出
           

頁面元素定位

8種基本定位方式

  • 通過id定位: find_element_by_id()
  • 通過name定位: find_element_by_name()
  • 通過class定位: find_element_by_class_name()
  • 通過tag定位: find_element_by_tag_name()
  • 通過link定位: find_element_by_link_text()
  • 通過partial link定位: find_element_by_partial_link_text()
  • 通過xpath定位: find_element_by_xpath()
  • 通過css定位: find_element_by_css_selector()
from selenium import webdriver
from time import sleep


browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://115.28.108.130/control.html")

browser.find_element_by_id("accountID").send_keys("hello")
browser.find_element_by_name("password").send_keys("123456")
browser.find_element_by_class_name("stuname").send_keys("class")

div = browser.find_element_by_tag_name("div") # 重複較多,隻能定位到第一個,不推薦使用
print(div.get_attribute("id"))

# browser.find_element_by_link_text("百度首頁走起~").click()
link = browser.find_element_by_link_text("百度首頁走起~")
print(link.text)
link.click()
sleep(1)
browser.back()
browser.find_element_by_partial_link_text("百度首頁").click()
browser.back()

label2 = browserb.find_element_by_xpath('/html/body/div[4]/label[2]')
print(label2.text)

summer = browser.find_element_by_xpath('//input[@id="u"][@value="summer"]')
summer.click()

browser.find_element_by_css_selector('#input > input').send_keys("1111")
browser.find_element_by_css_selector("#accountID").send_keys("張三")

           

補充:用By定位元素:

  • find_element(By.ID,"")
  • find_element(By.NAME, "")
  • find_element(By.CLASS_NAME, "")
  • find_element(By.TAG_NAME, "")
  • find_element(By.LINK_TEXT, "")
  • find_element(By.PARTIAL_LINK_TEXT, "")
  • find_element(By.XPATH, "")
  • find_element(By.CSS_SELECTOR, "")

定位一組元素

當元素擁有相同的id/name/class_name/tag_name等時,可以定位到所有的元素,然後按順序取得具體某個元素,這裡使用

find_elements_by_***

,注意對一個s

from selenium import webdriver
from time import sleep


browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://115.28.108.130/control.html")

l = browser.find_elements_by_id("u")
for i in l:
    i.click()
l[2].click()

lables = browser.find_elements_by_tag_name("label")
print(lables[2].text)
           

分層定位

當一個元素不好定位時,可以先定位到容易定位的父級/祖先級元素,然後使用父級/祖先級元素繼續定位,如:

from selenium import webdriver
from time import sleep


browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://115.28.108.130/control.html")
fardiv = browser.find_element_by_class_name("fathdiv")  # 先定位到父級元素
labels = fardiv.find_elements_by_tag_name("label")  # 使用父級元素向下定位
print(labels[2].text)
           

頁面元素操作

  • link 連結
    • click()
  • input 輸入框
    • send_keys(): 輸入
    • clear(): 清空輸入框
    • get_attribute("value"): 擷取輸入框的值
  • button 按鈕
    • click():
    • isEnabled(): 是否可用
    • submit():type=submit的按鈕可以使用submit()同click()用于送出表單
  • radio/checkbox 單選/複選框
    • click(): 定位到選框可直接點選
    • is_displayed(): 是否展示
    • is_selected(): 是否選中狀态
  • select 下拉框(需要用Select)
    • select_by_index(): 按索引選擇選項
    • select_by_value(): 按value值選擇選項
    • select_by_visiable_text(): 按選項名選擇選項
from selenium import webdriver
from time import sleep


browser = webdriver.Chrome()
browser.maximize_window()
browser.get("http://115.28.108.130/control.html")
area = Select(browser.find_element_by_id("areaID"))
area.select_by_visible_text("上海")
sleep(1)
area.select_by_index(1)
sleep(1)
area.select_by_value("1")
           

繼續閱讀