国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

web自動化框架:selenium學(xué)習(xí)使用操作大全(Python版)

這篇具有很好參考價值的文章主要介紹了web自動化框架:selenium學(xué)習(xí)使用操作大全(Python版)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、瀏覽器驅(qū)動下載

Selenium需要瀏覽器驅(qū)動程序才能與所選瀏覽器交互。例如,F(xiàn)irefox需要安裝geckodriver。確保它在PATH中。

主流瀏覽器驅(qū)動下載地址如下:

瀏覽器 驅(qū)動名稱 打開方式及注意事項 地址
Chrome chromedriver driver = webdriver.Chrome()
下載瀏覽器對應(yīng)版本的chromedriver.exe
一定要創(chuàng)建對象,不然打開會閃退?。?!
https://registry.npmmirror.com/binary.html?path=chromedriver
Firefox geckodriver webdriver.Firefox()
下載最新版本的geckodriver.exe
https://github.com/mozilla/geckodriver/releases
Edge MicrosoftWebDriver driver = webdriver.Edge()
最好在官網(wǎng)下載對應(yīng)版本的瀏覽器:https://www.microsoft.com/en-us/edge,然后下載瀏覽器對應(yīng)版本的msedgedriver.exe
一定要創(chuàng)建對象,不然打開會閃退?。?!
windows10運行代碼時:將msedgedriver.exe重命名為MicrosoftWebDriver.exe,不然運行程序會報錯?。?!
windows11運行代碼時:msedgedriver.exe不要重命名?。?!
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver
IE IEDriverServer webdriver.Ie()
下載selenium對應(yīng)版本的IEDriverServer.exe
https://registry.npmmirror.com/binary.html?path=selenium

具體,可以查看:chromedriver、geckodriver、MicrosoftWebDriver、IEDriverServer和operadriver之間的恩怨糾葛
ps:最新版chromedriver的下載地址:
https://googlechromelabs.github.io/chrome-for-testing/#stable

二、selenium-python安裝(打開網(wǎng)站、操作元素)

1.安裝

pip install -U selenium

注:-U就是指定下載最新版本的selenium
2. 控制瀏覽器
2.1 打開瀏覽器

from selenium import webdriver
# 打開瀏覽器
driver = webdriver.Chrome()

或者,可以指定驅(qū)動路徑:

driver = webdriver.Chrome(executable_path=r'D:\Program Files\Python36\chromedriver.exe')

關(guān)閉瀏覽器及其對應(yīng)驅(qū)動:

driver.quit()

還可以通過上下文來控制其執(zhí)行操作后自動關(guān)閉:

with webdriver.Chrome(executable_path='chromedriver.exe') as driver:
    driver......

2.2 打開網(wǎng)站

driver.get('https://blog.csdn.net/testleaf/article/details/123269042')

延時3秒:

import time
time.sleep(3)

2.3 定位元素
傳說中的八大元素定位方法:

driver.find_element_by_id()                 # 通過id屬性定位(唯一);常用
driver.find_element_by_xpath()              # 通過xpath表達式定位;常用
driver.find_element_by_class_name()         # 通過類名定位;常用
driver.find_element_by_name()               # 通過name屬性定位
driver.find_element_by_tag_name()           # 通過標簽名定位
driver.find_element_by_css_selector()       # 通過css選擇器定位
driver.find_element_by_link_text()          # 通過鏈接標簽的text類容定位
driver.find_element_by_partial_link_text()  # 通過匹配鏈接標簽的text類容定位

上面的都是找到第一個元素,每一個方法都有對應(yīng)多個元素的方法:
如:driver.find_elements_by_id()

示例1:
driver.find_element_by_id(“toolbar-search-input”)
web自動化框架,筆記,自動化測試,軟件測試,單元測試,壓力測試,selenium,自動化測試
示例2:
driver.find_element_by_name(“wd”)
web自動化框架,筆記,自動化測試,軟件測試,單元測試,壓力測試,selenium,自動化測試
2.4 操作元素

# 定位搜索框
element = driver.find_element_by_id("toolbar-search-input")
# 輸入搜索內(nèi)容
element.send_keys('web自動化框架:selenium入門')
# 定位搜索按鈕
search_button = driver.find_element_by_id('toolbar-search-button')
# 點擊搜索按鈕
search_button.click()

三、網(wǎng)頁解析(HTML、xpath)

1.HTML
HTML【Hyper Text Markup Language】:超文本標記語言,不是編程語言,用來描述網(wǎng)頁的。也稱為:網(wǎng)頁的源碼、html源碼、html文檔、document。
具體,可以查看:
網(wǎng)頁的源碼,html源碼,html文檔,document
HTML常用標簽
HTML示例:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #table {
            border: 1px solid
        }

        .th {
            font-size: 20px
        }
    </style>
</head>
<body>
<div>我是一個div標簽</div>
<h1>我是一個大<span style="color:red">標簽</span></h1>
<p></p>
<a href="https://blog.csdn.net/testleaf">testleaf</a>
<table id="table">
    <thead>
    <tr>
        <th class="th aaa">字段1</th>
        <th class="th">字段2</th>
        <th class="th">字段3</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
    </tbody>
</table>
<form action="">
    <p>用戶名: <input type="text"></p>
    <p>密碼:<input type="password"></p>
    <p><input type="submit"></p>
</form>
</body>
</html>

2.xpath
xpath:一個解析html/xml的語言。

  • 語法
    • 選取節(jié)點
      • nodename 選取此節(jié)點的所有子節(jié)點
      • / 從根節(jié)點選取
      • // 從匹配選擇的當(dāng)前節(jié)點選擇文檔中的節(jié)點,不考慮它們的位置
      • . 選取當(dāng)前節(jié)點
      • … 表示選取當(dāng)前節(jié)點的父節(jié)點,如://div[@class="active"]/..
      • @ 選取屬性
      • 案例
        • //div 獲取文檔中的所有的div
    • 謂語 用來查找特定的節(jié)點,或者包含指定值的節(jié)點
      • 謂語被包裹在中括號中
      • //div[@class="active"]
      • //div[@class="active" and @id="kw"]
      • //div[@class="active" or @id="kw"]
      • //div[@class="active"]/span[last()]
    • 軸 用來查找相對于當(dāng)前節(jié)點的節(jié)點
      • 使用語法 軸名稱::節(jié)點名稱[謂語]
      • ancestor 選取當(dāng)前節(jié)點的所有父輩節(jié)點
      • parent 選取當(dāng)前節(jié)點的父節(jié)點
      • 如://div[@class="active"]/child::book
      • …詳見 https://www.w3school.com.cn/xpath/xpath_axes.asp
    • 函數(shù)
      • text() 元素的text內(nèi)容
        • //li[text()="強烈推薦"]
      • contains(@屬性名/text(), value)包含的內(nèi)容
        • //li[contains(@class, "ls")]

在瀏覽器中進行驗證:

$x('//div')

web自動化框架,筆記,自動化測試,軟件測試,單元測試,壓力測試,selenium,自動化測試

四、selenium基本操作

Pycharm-Terminal操作:

IPYTHON
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
driver.quit()
exit()

web自動化框架,筆記,自動化測試,軟件測試,單元測試,壓力測試,selenium,自動化測試
瀏覽器-Console操作:

window.scrollTo(0,100)

web自動化框架,筆記,自動化測試,軟件測試,單元測試,壓力測試,selenium,自動化測試

1、元素定位八種方法

傳說中的八大元素定位方法:

driver.find_element_by_id()                 # 通過id屬性定位(唯一);常用
driver.find_element_by_xpath()              # 通過xpath表達式定位;常用
driver.find_element_by_class_name()         # 通過類名定位;常用
driver.find_element_by_name()               # 通過name屬性定位
driver.find_element_by_tag_name()           # 通過標簽名定位
driver.find_element_by_css_selector()       # 通過css選擇器定位
driver.find_element_by_link_text()          # 通過鏈接標簽的text類容定位
driver.find_element_by_partial_link_text()  # 通過匹配鏈接標簽的text類容定位

以上方法只會返回匹配到的第一個元素;
返回的是 selenium.webdriver.remote.webelement.WebElement的對象;
返回多個元素在element后加s即可,例如:driver.find_elements_by_xpath(),使用時要小心;
凡是elements的方法返回的是列表;

from selenium import webdriver

driver = webdriver.Chrome()

# 打開百度頁面
driver.get('https://www.baidu.com')

# 1. 獲取搜索框
search_input = driver.find_element_by_id('kw')
print(type(search_input))
print('1.搜索框的name屬性值=', search_input.get_attribute('name'))

# 2. 搜索按鈕
search_btn = driver.find_element_by_xpath('//input[@value="百度一下"]')
print('2.搜索按鈕的id=', search_btn.get_attribute('id'))

# 3. 百度logo
logo = driver.find_element_by_class_name('index-logo-src')
print('3.百度logo的src=', logo.get_attribute('src'))

# 4. 通過name屬性定位搜索框
search_input_by_name = driver.find_element_by_name('wd')
print('4.搜索框的id=', search_input_by_name.get_attribute('id'))

# 5. 熱搜榜中的鏈接
hot_ul = driver.find_element_by_xpath('//ul[@id="hotsearch-content-wrapper"]')
# hot_ul = driver.find_element_by_xpath('//ul[@text()="熱榜"]')
hot_a_s = hot_ul.find_element_by_tag_name('a')
print('5.熱搜榜第一的標題是:', hot_a_s.text)

# 6. 通過css選擇器定位搜索框
search_input_by_css = driver.find_element_by_css_selector('#kw')
print('6.搜索框的name=', search_input_by_css.get_attribute('name'))

# 7. 新聞欄目
el_a = driver.find_element_by_link_text('新聞')
print('7.新聞欄目的url=', el_a.get_attribute('href'))

# 8. 通過部分text匹配新聞欄目
el_a1 = driver.find_element_by_partial_link_text('新')
print('8.新聞欄目的url=', el_a1.get_attribute('href'))

driver.quit()

2、元素動態(tài)定位

問題:元素的定位方式不確定,可能是id,可能是xpath,需要通過不同的方式動態(tài)指定定位方法;
辦法:加判斷語句,不需要我們寫,selenium底層定位就是這么做的;

driver.find_element(by,value)
driver.find_elements(by,value)

by: 定位方式
value: 定位表達式

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

# 打開百度頁面
driver.get('https://www.baidu.com')

id_loc = 'kw'
xpath_loc = '//input[@id="kw"]'

e1 = driver.find_element(By.ID, id_loc)
# send_keys往輸入框輸入文本
e1.send_keys('我通過id定位')
time.sleep(3)

# e2 = driver.find_element(By.XPATH, xpath_loc)
e2 = driver.find_element('xpath', xpath_loc)
e2.clear()  # 清空原有內(nèi)容
e2.send_keys('我通過xpath定位')

time.sleep(3)
driver.quit()

3、iframe切換

當(dāng)頁面中包含iframe時,不能直接操作iframe中的元素,需要先切換進iframe才行;
selenium通過driver.switch_to.frame(frame_reference)來切換;
selenium切換iframe有三種方式:

  • 1.通過webelement:
    • 使用webelement進行切換是最靈活的選擇,先定位到iframe然后切換到它;
  • 2.通過name或id:
    • iframe一般都會有id或name屬性,則可以使用該屬性進行切換,如果name或id在頁面上不唯一,name將切換到找到的第一個;
  • 3.通過iframe在頁面中的索引進行切換(從0開始):
    • 在瀏覽器console調(diào)試工具中使用window.ampInaboxIframes可以查詢當(dāng)前頁面中的iframe;退出iframe:driver.switch_to.default_content();
import time
from selenium import webdriver

# 使用with語句進行上下文管理
# 異常時也會關(guān)閉瀏覽器驅(qū)動
with webdriver.Chrome() as driver:
    driver.get('https://www.w3school.com.cn/tiy/t.asp?f=eg_html_form_radio')
    # 切換iframe
    # 1. webelement的方式
    # 先獲取到iframe
    iframe = driver.find_element_by_id('iframeResult')
    # 再切換到
    driver.switch_to.frame(iframe)

    # 2. name/id的方式
    # 直接通過name/id切換
    driver.switch_to.frame('iframeResult')

    # 3. 使用索引
    # 切換到第二個iframe
    time.sleep(1)
    driver.switch_to.frame(1)
    # 找到female單選框
    female = driver.find_element_by_xpath('//input[@value="female"]')

    print(female)
    # 4. 離開iframe,回到主頁面
    driver.switch_to.default_content()
    driver.find_element_by_xpath('//a[text()="運行代碼"]')

4、填充表單_填充文本框

import time
from selenium import webdriver

with webdriver.Chrome() as driver:
    driver.get('https://www.baidu.com')

    # 搜索框定位
    search_input = driver.find_element_by_id('kw')
    # element.send_keys(string)輸入文本
    # 所有可輸入的標簽都適用
    search_input.send_keys('軟件測試')

    # 搜索按鈕定位
    search_btn = driver.find_element_by_xpath('//input[@value="百度一下"]')
    # 點擊
    # element.click()點擊
    search_btn.click()
    time.sleep(3)

5、填充表單_單選按鈕

import time
from selenium import webdriver
with webdriver.Chrome() as driver:
    driver.get('https://www.w3school.com.cn/tiy/t.asp?f=eg_html_form_radio')
    # 切換iframe
    iframe = driver.find_element_by_id('iframeResult')
    driver.switch_to.frame(iframe)
    # 找到female單選框
    female = driver.find_element_by_xpath('//input[@value="female"]')
    # 在元素上點擊
    female.click()  # 選中
    time.sleep(5)

6、填充表單_下拉列表

下拉框有兩種處理方法:
(1)直接定位到要選中的option選項,然后點擊
(2)通過selenium.webdriver.support.ui.Select類

import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select

with webdriver.Chrome() as driver:
    driver.get('https://www.w3school.com.cn/tiy/t.asp?f=eg_html_elements_select')
    # 切換iframe
    iframe = driver.find_element_by_id('iframeResult')
    driver.switch_to.frame(iframe)
    # 找到audi選項
    # 1. 通過option直接操作
    option = driver.find_element_by_xpath('//option[@value="audi"]')
    option.click()
    time.sleep(1)
    # 2. 通過select類
    # 找到select
    select = Select(driver.find_element_by_xpath('//select[@name="cars"]'))
    #
    # # 選中索引為1的選項,索引從0開始
    select.select_by_index(1)
    time.sleep(1)
    #
    # # 選中value等于audi的選項
    select.select_by_value('audi')
    time.sleep(1)
    #
    # # 選中option的文本為Volvo的選項
    select.select_by_visible_text('Volvo')
    time.sleep(3)

7、切換窗口和標簽頁

webdriver 不區(qū)分窗口和標簽頁。打開一個新的標簽頁或者窗口,selenium會使用窗口句柄來處理它。
每個窗口都有一個唯一的標識符,該標識符在單個會話中保持持久性。
(1)獲取當(dāng)前窗口句柄:driver.current_window_handle;
(2)切換窗口或標簽頁:通過循環(huán)遍歷的方式來切換;

import time
from selenium import webdriver
with webdriver.Chrome() as driver:
    driver.get('https://www.baidu.com')
    # 找到搜索框
    search_input = driver.find_element_by_id('kw')
    search_input.send_keys('圖片')
    # 點擊搜索按鈕
    driver.find_element_by_id('su').click()
    time.sleep(1)
    # 獲取原窗口的handle
    original_window = driver.current_window_handle
    print('當(dāng)前窗口句柄', original_window)
    print('窗口的title', driver.title)

    # 選取第一個結(jié)果并點擊
    driver.find_element_by_xpath('//div[@id="3001"]//a').click()
    # time.sleep(1)
    for handle in driver.window_handles:
        if handle != original_window:
            # 切換到新窗口
            driver.switch_to.window(handle)
            break
    # 打印當(dāng)前窗口句柄
    print('新打開的搜索頁面句柄', driver.current_window_handle)
    print('新打開的頁面的title', driver.title)
    time.sleep(5)

8、顯式等待

瀏覽器渲染頁面的時候需要時間,如果沒有渲染完成就對元素進行定位將會找不到到該元素;
所以需要加延時進行等待,有三種等待方式:
(1)time.sleep()
前面已經(jīng)反復(fù)使用了;等待時間固定,不穩(wěn)定;等待時間多半不確定;

(2)顯式等待
顯式等待就是在元素操作前循環(huán)判斷操作的條件是否滿足,滿足后再操作;
selenium通過selenium.webdriver.support.ui.WebDriverWait類的對象來實現(xiàn)顯式等待;webDriverWait類實例化時可以接收3個參數(shù):

  • driver: webdriver對象
  • timeout:超時時間,最多等待多少秒
  • poll_frequency: 檢查頻率,默認0.5秒

until方法接受1個參數(shù):

  • conditions:條件在selenium.webdriver.support.expected_conditions 模塊中;
    常見條件:
    presence_of_element_located:元素存在于dom中
    visibility_of_element_located:元素可見
    element_to_be_clickable:元素可點擊
    element_to_be_selected:元素可選擇

實例化條件需要傳入一個定位參數(shù),是一個二元元組:(by, loc_expression)

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
import selenium.webdriver.support.expected_conditions as EC


with webdriver.Chrome() as driver:
    driver.get('https://www.baidu.com')
    # 找到搜索框
    search_input = driver.find_element_by_id('kw')
    search_input.send_keys('圖片')
    # 點擊搜索按鈕
    driver.find_element_by_id('su').click()
    # 獲取原窗口的id
    original_window = driver.current_window_handle
    print('當(dāng)前窗口句柄', original_window)
    print('窗口的title', driver.title)

    # 選取第一個結(jié)果并點擊
    #
    # WebDriverWait(driver, timeout=3).until(
    #     EC.visibility_of_element_located((By.XPATH, '//div[@id="3001"]//a'))
    # ).click()
    s_time = time.time()
    btn = WebDriverWait(driver, timeout=3).until(
        EC.visibility_of_element_located((By.ID, '3001'))
    )
    btn.click()
    e_time = time.time()
    print(e_time-s_time)
    # WebDriverWait(driver, timeout=3).until(
    #     EC.visibility_of_element_located(('id', '3001'))
    # ).click()
    # 會等待id為3001的元素可見,timeout=3表示最多等待3秒鐘,超時就拋出異常
    # driver.find_element_by_xpath('//div[@id="3001"]//a').click()
    # time.sleep(1)
    for handle in driver.window_handles:
        if handle != original_window:
            # 切換到新窗口
            driver.switch_to.window(handle)
            break
    # 打印當(dāng)前窗口句柄
    print('新打開的搜索頁面句柄', driver.current_window_handle)
    print('新打開的頁面的title', driver.title)
    time.sleep(5)

9、隱式等待

(3)隱式等待
隱式等待本質(zhì)上是設(shè)置了一個全局等待時間,WebDriver在試圖查找任何元素時都會輪詢一定時間,默認情況下隱式等待是禁用的。
警告:不要混用隱式等待和顯示等待,這樣會導(dǎo)致不可預(yù)測的等待時間。
例如:隱式等待設(shè)置10秒,顯式等待設(shè)置15秒,可能導(dǎo)致在20秒后發(fā)生超時;
隱式等待是告訴WebDriver如果在查找一個或多個不是立即可用的元素時輪詢DOM一段時間。默認設(shè)置為0,表示禁用。一旦設(shè)置好,隱式等待就會被設(shè)置為會話的生命周期。

import time
from selenium import webdriver

with webdriver.Chrome() as driver:
    # 設(shè)置隱式等待5秒
    driver.implicitly_wait(5)
    driver.get('https://www.baidu.com')
    # 找到搜索框
    search_input = driver.find_element_by_id('kw')
    search_input.send_keys('圖片')
    # 點擊搜索按鈕
    driver.find_element_by_id('su').click()
    # 獲取原窗口的id
    original_window = driver.current_window_handle
    print('當(dāng)前窗口句柄', original_window)
    print('窗口的title', driver.title)

    # 選取第一個結(jié)果并點擊
    driver.find_element_by_xpath('//div[@id="3001"]//a').click()

    for handle in driver.window_handles:
        if handle != original_window:
            # 切換到新窗口
            driver.switch_to.window(handle)
            break
    # 打印當(dāng)前窗口句柄
    print('新打開的搜索頁面句柄', driver.current_window_handle)
    print('新打開的頁面的title', driver.title)
    time.sleep(5)

10、警告框

WebDriver提供了一個API,用于處理JavaScript提供的三種類型的原生彈窗消息
(1)Alerts警告框

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

with webdriver.Chrome() as driver:
    driver.get('https://www.w3school.com.cn/tiy/t.asp?f=js_alert')
    driver.switch_to.frame('iframeResult')

    button = WebDriverWait(driver, timeout=3).until(
        EC.visibility_of_element_located(('xpath', '//button')))
    # 有時候需要結(jié)合sleep來處理
    # time.sleep(1)
    button.click()
    # time.sleep(3)
    # 等待alert彈出

    alert = WebDriverWait(driver, timeout=3).until(EC.alert_is_present())
    # time.sleep(1)
    # alert = driver.switch_to.alert
    # 獲取彈出框文本
    text = alert.text
    print(text)
    time.sleep(1)
    # # 確認
    alert.accept()
    time.sleep(1)

11、confirm確認框

(2) confirm確認框
與警告框不同,確認框還有取消按鈕;

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


with webdriver.Chrome() as driver:
    driver.get('https://www.w3school.com.cn/tiy/t.asp?f=js_confirm')
    driver.switch_to.frame('iframeResult')

    button = WebDriverWait(driver, timeout=3).until(
        EC.visibility_of_element_located(('xpath', '//button')))

    button.click()
    # # 等待confirm彈出
    WebDriverWait(driver, timeout=3).until(EC.alert_is_present())
    #
    # # 獲取alert
    alert = driver.switch_to.alert
    #
    # # 獲取彈出框文本
    text = alert.text
    print(text)
    time.sleep(2)
    # # 取消
    # 點擊取消后 當(dāng)前的alert對象就會被銷毀
    alert.dismiss()
	# alert.accept() 確認
    time.sleep(2)

12、prompt提示框

(3)prompt提示框
還可以輸入文本;

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
with webdriver.Chrome() as driver:
    driver.get('https://www.w3school.com.cn/tiy/t.asp?f=js_prompt')
    driver.switch_to.frame('iframeResult')

    button = WebDriverWait(driver, timeout=3).until(
        EC.visibility_of_element_located(('xpath', '//button')))
    # 避免js沒有綁定出現(xiàn)意外問題,加一秒延時
    time.sleep(1)
    button.click()

    # 等待alert彈出
    WebDriverWait(driver, timeout=3).until(EC.alert_is_present())

    # 獲取alert
    alert = driver.switch_to.alert

    # 輸入信息
    alert.send_keys('testleaf')
    time.sleep(3)
    # 確認
    alert.accept()
    # alert.dismiss() 取消
    time.sleep(3)

13、鼠標操作動作鏈

鼠標是通過使用底層接口執(zhí)行的,需要調(diào)用ActionChains對象來執(zhí)行對應(yīng)的方法。
(1)clickAndHold:它將移動到該元素,然后在給定元素的中間單擊(不釋放);
(2)contextClick:此方法首先將鼠標移動到元素的位置, 然后在給定元素執(zhí)行上下文點擊(右鍵單擊);
(3)doubleClick:它將移動到該元素, 并在給定元素的中間雙擊;
(4)moveToElement:此方法將鼠標移到元素的中間. 執(zhí)行此操作時, 該元素也會滾動到視圖中;
(5)moveByOffset:此方法將鼠標從其當(dāng)前位置(或0,0)移動給定的偏移量. 如果坐標在視圖窗口之外, 則鼠標最終將在瀏覽器窗口之外;
(6)dragAndDrop:此方法首先在源元素上單擊并按住,然后移動到目標元素的位置后釋放鼠標;
(7)release:此操作將釋放按下的鼠標左鍵. 如果WebElement轉(zhuǎn)移了, 它將釋放給定WebElement上按下的鼠標左鍵;

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

with webdriver.Chrome() as driver:
    driver.get(r'file://D:\project\action.html')

    div = WebDriverWait(driver, timeout=3).until(EC.visibility_of_element_located(('xpath', '//div[@οnmοuseοver="mOver(this)"]')))
    # 移動到指定元素 move_to_element
    webdriver.ActionChains(driver).move_to_element(div).perform()
    time.sleep(2)
    # 移開多大位置x,y move_by_offset
    webdriver.ActionChains(driver).move_by_offset(xoffset=500, yoffset=500).perform()
    time.sleep(2)
    # 點住不放 click_and_hold
    div = driver.find_element_by_xpath('//div[@οnmοusedοwn="mDown(this)"]')
    webdriver.ActionChains(driver).click_and_hold(div).perform()
    time.sleep(2)
    # 松開鼠標 release
    webdriver.ActionChains(driver).release(div).perform()
    time.sleep(2)
    # double_click 雙擊
    button = driver.find_element_by_xpath('//button[@ondblclick]')
    webdriver.ActionChains(driver).double_click(button).perform()
    time.sleep(2)
    # drag 將div1拖拽到div2上
    div1 = driver.find_element_by_id('draggable')
    div2 = driver.find_element_by_id('droppable')
    webdriver.ActionChains(driver).drag_and_drop(div1, div2).perform()
    time.sleep(3)
    # contextClick 點擊鼠標右鍵
    div = driver.find_element_by_xpath('//div[@οnmοusedοwn="whichButton(event)"]')
    webdriver.ActionChains(driver).context_click(div).perform()
    time.sleep(2)

14、執(zhí)行js代碼_滾動1

selenium執(zhí)行js有幾個方法,這里我們使用最常用的方法execute_script;

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

with webdriver.Chrome() as driver:
    driver.get('https://image.baidu.com')
    search_input = WebDriverWait(driver, 3).until(EC.visibility_of_element_located(('id', 'kw')))
    search_input.send_keys('軟件測試')
    WebDriverWait(driver, 3).until(EC.element_to_be_clickable(('xpath', '//input[@value="百度一下"]'))).click()
    time.sleep(3)
    # 滾動到(0px,100px)的位置
    driver.execute_script("window.scrollTo(0,100)")
    time.sleep(1)
    driver.execute_script("window.scrollTo(0,200)")
    time.sleep(1)
    driver.execute_script("window.scrollTo(0,300)")
    time.sleep(3)
    # 移動到底部
    driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
    time.sleep(3)
    # 移動到頂部
    driver.execute_script("window.scrollTo(0,0)")
    time.sleep(3)

15、執(zhí)行js代碼_滾動2

selenium執(zhí)行js有幾個方法,這里我們使用最常用的方法execute_script;
執(zhí)行js時,還可以傳遞參數(shù)給js腳本;
下面的案例:
打開頁面,并滾動到指定的元素可見為止;
下面的代碼 div 被傳遞給了arguments,通過切片的方式可以取出;

import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

with webdriver.Chrome() as driver:
    driver.get(r'file://D:\project\scroll.html')
    time.sleep(2)
    div = driver.find_element_by_xpath('//div')
    # 移動到元素的底端與當(dāng)前窗口的底部對齊
    driver.execute_script("arguments[0].scrollIntoView(false);", div)
    time.sleep(2)
    # 移動到元素的頂端與當(dāng)前窗口的頂端對齊
    driver.execute_script("arguments[0].scrollIntoView();", div)
    time.sleep(2)

16、上傳操作_input上傳

selenium只支持input元素的上傳,直接使用send_keys將文件絕對地址寫入元素即可;

import time
from selenium import webdriver

with webdriver.Chrome() as driver:
    driver.get('https://www.baidu.com')
    span = driver.find_element_by_xpath('//span[@class="soutu-btn"]')
    span.click()
    time.sleep(1)
    input = driver.find_element_by_xpath('//input[@class="upload-pic"]')

    input.send_keys(r'D:\project\find.jpg')

    # 有可能還需要提交的操作,百度是不需要
    time.sleep(10)

17、上傳操作_非input上傳_pywinauto

很多時候頁面不是使用input來進行文件上傳,這是就需要通過其他第三方包來操作系統(tǒng)界面;
(1)pywinauto
缺點: 只能在windwows上使用;
優(yōu)點:可以選擇多個文件,路徑中有中文也可以;

import time

from selenium import webdriver
from pywinauto.keyboard import send_keys

with webdriver.Chrome() as driver:
    driver.get('https://www.baidu.com')
    span = driver.find_element_by_xpath('//span[@class="soutu-btn"]')
    span.click()
    time.sleep(1)
    # select_span = driver.find_element_by_xpath('//span[text()="選擇文件"]')
    select_span = driver.find_element_by_xpath('//div[@class="upload-wrap"]')
    # 點擊打開選擇文件窗口
    select_span.click()

    time.sleep(3)
    # 選擇文件
    send_keys(r'D:\project\find.jpg')
    time.sleep(1)
    # # 選擇確定
    send_keys('{ENTER}')
    time.sleep(10)

18、上傳操作_非input上傳_pyautogui

很多時候頁面不是使用input來進行文件上傳,這里就需要通過其他第三方包來操作系統(tǒng)界面;
(2)pyautogui
缺點: 只能選擇一個文件,文件路徑有中文會出問題;
優(yōu)點:跨平臺(windows,mac,linux);

import time

from selenium import webdriver
import pyautogui

with webdriver.Chrome() as driver:
    driver.get('https://www.baidu.com')
    span = driver.find_element_by_xpath('//span[@class="soutu-btn"]')
    span.click()
    time.sleep(1)
    # select_span = driver.find_element_by_xpath('//span[text()="選擇文件"]')
    select_span = driver.find_element_by_xpath('//div[@class="upload-wrap"]')
    # 點擊打開選擇文件窗口
    select_span.click()

    time.sleep(3)
    # 選擇文件
    pyautogui.write(r"D:\project\find.jpg")
    time.sleep(1)
    # 選擇確定
    pyautogui.press('enter', 2)
    time.sleep(10)

五、selenium調(diào)整窗口大小

selenium調(diào)整窗口到指定大小:

driver.set_window_size(900,1000)

瀏覽器最大化:

driver.maximize_window() 

六、判斷元素是否允許被操作

driver.find_element_by_name("XXX").is_enabled() # 是否可以編輯,或者按鈕是否可以點擊
 
driver.find_element_by_name("XXX").is_displayed() # 判斷元素是否顯示
 
element=driver.find_element_by_name("XXX").is_selected() # 判斷元素是否選中狀態(tài)

七、獲取某個元素的html

driver.find_element_by_id('XXX').get_attribute('innerHTML')

八、其他問題

1、svg定位

問題描述:
使用xpath方法對svg下元素進行定位,會發(fā)現(xiàn)無法定位到svg下的元素:

driver.find_element(xpath,"/html/body/div[19]/svg")

解決方法1【錯誤】:
從svg元素開始,下面的元素都要以*[name()=‘svg element’] 這種形式進行編寫

driver.find_element(xpath,"/html/body/div[19]/*[name()='svg']/*[name()='path']")

會發(fā)現(xiàn)仍然定位不到;
解決辦法2【正確】:
絕對路徑的話,*[name()='svg']前面得加雙斜杠,不然定位不到:

driver.find_element(xpath,"/html/body/div[19]//*[name()='svg']")

相對路徑的話,*[name()='svg']前就不用加雙斜杠,只用單斜杠:

driver.find_element(xpath,"http://*[@id='userinfo']/*[name()='svg']/*[name()='use']")

2、處理chrome顯示通知彈框

使用chrome打開weibo.com會出現(xiàn)以下界面的彈出框:
web自動化框架,筆記,自動化測試,軟件測試,單元測試,壓力測試,selenium,自動化測試

這東西不屬于頁面alert彈框,而是屬于瀏覽器的設(shè)置項。

要關(guān)掉它,需要對瀏覽器進行屬于配置。具體見下面腳本:

from selenium import webdriver

options = webdriver.ChromeOptions()
prefs = {
    'profile.default_content_setting_values':{
        'notifications':2
    }
}
options.add_experimental_option('prefs',prefs)
driver = webdriver.Chrome(options = options)
driver.get("https://blog.csdn.net/testleaf/article/details/123269042")

3、獲取元素的文本

element.text
get_attribute(“textContent”)
優(yōu)點:可以獲取隱藏元素的文本
缺點:IE不支持;獲取有些元素的文本時,結(jié)果中帶有空字符串;(沒有嘗試過)
get_attribute("innerText")
優(yōu)點:可以獲取隱藏元素的文本
缺點:FireFox不支持;(每個博客能搜到的都說這個缺點,但實際操作發(fā)現(xiàn)可以獲取到每次所需的文本)

4、切換網(wǎng)址

直接進行切換就可以了,如下:

driver.get('https://blog.csdn.net/testleaf/article/details/123269042')
time.sleep(2)
driver.get('https://blog.csdn.net/testleaf/article/details/123302863')

5、find_element_by_xpath()被棄用解決方案

from selenium.webdriver.common.by import By
from selenium import webdriver
driver = webdriver.Chrome() #啟動chromedriver
driver.get('http://www.baidu.com') #打開http://www.baidu.com
driver.find_element(By.XPATH,'//div[@class="detail-item-ctn"][1]').click() #點擊按鈕

免責(zé)聲明:
1.編寫此文是為了更好地學(xué)習(xí)selenium的使用,如果損害了有關(guān)人的利益,請聯(lián)系刪除;
2.如果文中描述欠妥,請在評論中進行指正;
3.文字編寫不易,若感覺有用,點贊收藏關(guān)注會讓博主很開心哦;
4.此外,本文支持任何形式的轉(zhuǎn)載,轉(zhuǎn)載請注明出處,非常感謝?。?!
本文源自:https://blog.csdn.net/testleaf/article/details/123269042文章來源地址http://www.zghlxwxcb.cn/news/detail-674801.html

到了這里,關(guān)于web自動化框架:selenium學(xué)習(xí)使用操作大全(Python版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • python基于Selenium的web自動化框架

    python基于Selenium的web自動化框架

    1 什么是selenium Selenium 是一個基于瀏覽器的自動化工具,它提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid: Selenium IDE:Firefox的一個擴展,它可以進行錄制回放,并可以把錄制的操作以多種語言(例

    2024年02月02日
    瀏覽(22)
  • WEB自動化測試(selenium工具)框架、面試題

    WEB自動化測試(selenium工具)框架、面試題

    ? ? ? ? ? ? 讓程序員代替人為去驗證web項目功能的過程 ? ???1)需求變動不頻繁 測試腳本的穩(wěn)定性決定了自動化測試的維護成本。如果軟件需求變動過于頻繁,測試人員需要根據(jù)變動的需求來更新測試用例以及相關(guān)的測試腳本,而腳本的維護本身就是一個代碼開發(fā)的過程,

    2024年02月03日
    瀏覽(32)
  • 從零開始學(xué)習(xí)Web自動化測試:如何使用Selenium和Python提高效率?

    從零開始學(xué)習(xí)Web自動化測試:如何使用Selenium和Python提高效率?

    目錄 引言: 一、了解Web自動化測試的基本概念 二、選擇Web自動化測試工具 三、學(xué)習(xí)Web自動化測試的技能 四、實踐Web自動化測試 五、總結(jié) 隨著互聯(lián)網(wǎng)的不斷發(fā)展,Web自動化測試越來越受到關(guān)注。Web自動化測試可以幫助我們輕松地檢查網(wǎng)站的功能和性能,提高軟件開發(fā)的效率

    2024年02月01日
    瀏覽(25)
  • Python+selenium,輕松搭建 Web 自動化測試框架

    Python+selenium,輕松搭建 Web 自動化測試框架

    在程序員的世界中,一切重復(fù)性的工作,都應(yīng)該通過程序自動執(zhí)行。 「自動化測試」就是一個最好的例子。 隨著互聯(lián)網(wǎng)應(yīng)用開發(fā)周期越來越短,迭代速度越來越快,只會點點點,不懂開發(fā)的手工測試,已經(jīng)無法滿足如今的業(yè)務(wù)要求,只能被企業(yè)逐步裁員淘汰。 「自動化測試

    2024年02月10日
    瀏覽(28)
  • 基于Selenium+Python的web自動化測試框架

    基于Selenium+Python的web自動化測試框架

    一、什么是Selenium? Selenium是一個基于瀏覽器的自動化測試工具,它提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selenium Grid。 Selenium IDE:Firefox的一個擴展,它可以進行錄制回放,并把錄制的操作以多種語言

    2024年02月02日
    瀏覽(105)
  • Web自動化之Selenium-鼠標操作

    Web自動化之Selenium-鼠標操作

    本文總結(jié)了Selenium常用的鼠標操作。? 打開百度網(wǎng)站,點擊首頁的新聞。 WebDriver封裝了一套鼠標操作的包, ●引入包:from selenium.webdriver.common.action_chains import ActionChains。 ●定位元素,存儲到某個變量:ele = driver.find_element_by_×××(\\\'××\\\')。 ●固定寫法:ActionChains(driver).click(e

    2024年02月11日
    瀏覽(22)
  • Web自動化之Selenium常用操作

    Web自動化之Selenium常用操作

    本文總結(jié)使用selenium進行web/UI自動化時,會用到的一些常用操作。 是元素定位另外一種方式,跟上面的8種底層一樣。 在定義driver的時候設(shè)置chrome_options參數(shù),該參數(shù)是一個Options類所實例化的對象。其中,常用的參數(shù)是設(shè)置瀏覽器是否可視化和瀏覽器的請求頭等信息,前者可

    2024年02月02日
    瀏覽(30)
  • Selenium基于Python web自動化測試框架 -- PO

    Selenium基于Python web自動化測試框架 -- PO

    ??? 交流討論: 歡迎加入我們一起學(xué)習(xí)! ?? 資源分享 : 耗時200+小時精選的「軟件測試」資料包 ??? 教程推薦: 火遍全網(wǎng)的《軟件測試》教程?? ?? 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正! 關(guān)于selenium測試框架首先想到的就是PO模型,簡單說下PO模型 PO模型的

    2024年02月22日
    瀏覽(27)
  • 基于Selenium+Python的web自動化測試框架詳解

    目錄 一、什么是Selenium? 二、自動化測試框架 三、自動化框架的設(shè)計和實現(xiàn) 四、需要改進的模塊 五、總結(jié) Selenium是一個基于瀏覽器的自動化測試工具,它提供了一種跨平臺、跨瀏覽器的端到端的web自動化解決方案。Selenium主要包括三部分:Selenium IDE、Selenium WebDriver 和Selen

    2024年02月09日
    瀏覽(29)
  • selenium+python做web端自動化測試框架實戰(zhàn)

    selenium+python做web端自動化測試框架實戰(zhàn)

    最近受到萬點暴擊,由于公司業(yè)務(wù)出現(xiàn)問題,工作任務(wù)沒那么繁重,有時間摸索selenium+python自動化測試,結(jié)合網(wǎng)上查到的資料自己編寫出適合web自動化測試的框架,由于本人也是剛剛開始學(xué)習(xí)python,這套自動化框架目前已經(jīng)基本完成了所以總結(jié)下編寫的得失,便于以后回顧溫

    2024年02月14日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包