Selenium自動化測試次日(上)

若有任何學習問題,能夠添加做者微信:lockingfreecss

目錄

框架

一個框架就是一個獨立的網頁 html

frameset: 框架組,用來佈局框架
frame: 具體的一個框架,通常放在frameset中
iframe: 內聯框架, 能夠嵌入到其餘網頁的body中python

切入 層層切入

switch_to.frame() # 只用切 iframe/frame 不用切framesetweb

  1. id
  2. name
  3. index
  4. 定位到的frame元素 find_element_by_id("parent")

切出

switch_to.parent_frame() # 跳到上級 多層框架推薦使用
switch_to.defaut_content() # 跳出全部 一層框架推薦使用 也能夠用switch_to.parent_frame()跳出框架微信

示例

from selenium import webdriver
from time import sleep

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

# iframe: 內聯框架, 能夠嵌入到其餘網頁的正文中,
# frameset: 框架組,用來佈局,能夠嵌套,不能嵌入到body中,
# frame,框架,須要放到frameset中
# 只用切iframe及frame, frameset是用來佈局的,不用切
driver.switch_to.frame("parent_frame")
driver.switch_to.frame("left")
driver.find_element_by_link_text("連接1").click()

driver.switch_to.parent_frame()  # 這裏不用swith_to.default_content(),否則還要再切到parent_frame
driver.switch_to.frame("main")
print(driver.find_element_by_tag_name("h2").text)
# print(driver.find_element_by_xpath("/html/body/h2").text)

sleep(5)
driver.quit()

練習

打開 http://115.28.108.130/control.html,點擊連接1,輸出右側文本內容網絡

注意

  1. 框架中的頁面 儘可能不要使用xpath絕對路徑定位 /html/body/h2

xpath

  1. 絕對路徑+索引 /html/body/div/form/div[3] 逐層寫 結合index index從1開始
  2. 相對路徑+屬性(推薦) //div[@id="firstdiv"] 支持多屬性結合定位
  3. 經過子標籤 //div[a] 包含連接的div
  4. 經過文本定位 //[text()="第二個div"] 包含 //[contains(text(), "username")]
  5. 經過相對位置 //*[text()="第二個div"]/../table
  6. 軸 //[text()="王五"]/following::a following後面的
    //
    [text()="用戶名"]/following::input 用戶名後的第一個輸入框

也能夠經過F12複製(不推薦:有可能有問題)框架

注意:

  1. xpath的索引從1開始
  2. 使用文本定位 注意 換行 空格  特殊字符
  3. 注意動態位置,動態屬性
  4. 注意複製的xpath可能會有問題

css selector

css選擇器, 比xpath快
find_element_by_css_selector("#firstdiv")佈局

基本

  1. id #firstdiv
  2. class .stuname
  3. 標籤名 div *能夠標識任意標籤

位置 不支持向上

  1. 下級 #firstdiv>form>div >或空格
    • 同級元素
  2. 索引: :first-child() :nth-child(n) #firstdiv>form>div:nth-child(3)

屬性 不支持判斷文本

  1. 屬性 [type="password"] [name=""]
  2. 屬性 ^= 以 開頭 $= 以 結尾 *= 包含
  3. input 常見屬性: checked enabled

示例

from selenium import webdriver
from time import sleep

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

div = driver.find_element_by_css_selector("#firstdiv>form>div:nth-child(2)")
print(div.text)
table = driver.find_element_by_css_selector("#firstdiv>form>div+table")
print(table.tag_name)

練習:

打開 http://115.28.108.130/control.html#學習

  1. 找到"第二個div"並打印文本 text
  2. 找到"第二個div"同級的table並打印標籤名 tag_name

注意:

  1. css selector不支持往上級查找
  2. 不支持查找包含某個子標籤的標籤
  3. 不支持查找指定文本內容的標籤

切換窗口

  1. switch_to.alert(): 切到彈出框
  2. switch_to.frame(): 切入框架
  3. switch_to.window(): 切換窗口
  • window_handles: 全部窗口句柄 列表
  • current_window_handle: 當前窗口句柄

只有兩個窗口

all = driver.window_handles  # 全部窗口句柄
old = driver.current_window_handle  # 當前窗口出版

for h in all:  # h 是當前從all中取出來的句柄
    if h != old:  # 若是取出來的不等於老窗口
        driver.switch_to.window(h)   # 切換到新窗口

多個窗口

all = driver.window_handles
for h in all:
    driver.switch_to.window(h)
    if "騰訊課堂" in driver.title:
        break  # 跳出循環

示例

from selenium import webdriver
from time import sleep

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


# 1. 切到新頁面(只打開了兩個頁面)
driver.find_element_by_partial_link_text("在新頁面").click()
print(driver.title)  # 還在原頁面
all = driver.window_handles
old = driver.current_window_handle
for h in all:
    if h!=old:
        driver.switch_to.window(h)
print(driver.title) # 切換到了新頁面
driver.find_element_by_id("kw").send_keys("龍騰育才")
driver.find_element_by_id("su").click()
sleep(1)
driver.find_element_by_partial_link_text("騰訊課堂").click()  # 又打開了新頁面

# 2. 多窗口切換, 根據網頁標題切換
print(driver.title)  # 還在百度搜索頁上

all = driver.window_handles
for h in all:
    driver.switch_to.window(h)
    if "騰訊課堂" in driver.title:
        break
else:
    print("沒有找到相應的頁面")

print(driver.title)

sleep(5)
driver.quit()

練習

打開百度 http://www.baidu.com
搜索趕集網
切換到趕集網,並打印標題測試

此爲北京龍騰育才 Python高級自動化(Selenium部分)授課筆記
課程介紹
想要參加現場(北京)/網絡課程的能夠聯繫做者微信:lockingfree

  1. 高效學習,快速掌握Python自動化全部領域技能
  2. 同步快速解決各類問題
  3. 配套實戰項目練習
相關文章
相關標籤/搜索