自動化測試:webdriver常用API

首先我們要使用selenium webdriver的相關API,先要將包導入進來,即from selenium import webdriver,然後將對應的瀏覽器定義出來,我使用的是Firefox瀏覽器,首先我們先來簡單實現一個腳本,例如:

from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").send_keys("布拉格")
driver.find_element_by_id("su").click()
time.sleep(8)
driver.quit()

他實現的是打開百度,然後定位到布拉格,點擊搜索布拉格等待8秒,我們可以注意到,這裏定位我們使用find_element_by_id這個API進行定位,其實它是通過id來進行定位的,driver.quit()表示退出並關閉窗口的每一個相關驅動程序,釋放與driver server之間的連接(如果是driver.close()表示關閉當前窗口)

元素定位

首先對象的定位是自動化測試的核心,要操作一個對象,首先我們就應該識別這個對象,對象有各種屬性,例如id、name等,我們可以通過這個屬性找到這個對象。
注意:不管使用哪種方式,我們必須保證頁面上該屬性的唯一性。
webdriver提供了一系列的對象定位方法,例如:

id
name
class name
link text
partial link text
tag name
xpath
css selector

百度搜索框的可以用多種方式來定位,我們可以通前端工具查看一下它的屬性信息,如圖:
在這裏插入圖片描述
可以看到藍色陰影的就是百度輸入框的屬性信息,即:

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

它的id是kw,name是wd,class是s_ipt;
再如圖,捕捉百度搜索框的屬性信息,如圖:
在這裏插入圖片描述
即它的屬性信息爲:

<input type="submit" id="su" value="百度一下" class="bg s_btn">

可以發現它的type是submit,id是su;

  • 使用id定位
    我們實現腳本:
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
driver.find_element_by_id("kw").send_keys("布拉格")#通過id定位百度輸入框,搜索布拉格
driver.find_element_by_id("su").click()#通過id定位到百度搜索框,點擊
time.sleep(8)#等待8秒
driver.quit()

就可以打開火狐瀏覽器百度輸入布拉格並且點擊搜索,通過find_element_by_id(“kw”)函數捕獲到百度輸入框,再通過find_element_by_id(“su”)函數捕獲到百度搜索框;

  • 通過name定位
    實現腳本:
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
driver.find_element_by_name("wd").send_keys("蘋果")
driver.find_element_by_id("su").click()#通過id定位到百度搜索框,點擊
time.sleep(8)#等待8秒
driver.quit()
  • 通過class name定位
    實現腳本:
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
#通過class name定位
driver.find_element_by_class_name("s_ipt").send_keys("布拉格")
driver.find_element_by_id("su").click()#通過id定位到百度搜索框,點擊
time.sleep(8)#等待8秒
driver.quit()
  • 通過tag name定位元素
    也就是通過屬性信息的標籤的名字來定位,例如百度輸入框的標籤就是input,但是input這個標籤在百度頁面並不是唯一的,因此無法使用這個來定位百度輸入框;
  • 通過xpath定位元素
    實現腳本:
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
driver.find_element_by_xpath("//*[@id='kw']").send_keys("布拉格")
driver.find_element_by_id("su").click()#通過id定位到百度搜索框,點擊
time.sleep(8)#等待8秒
driver.quit()

xpath就是從HTML開始到這個元素的路徑,我們可以賦值xpath,如圖:
在這裏插入圖片描述
xpath的寫法就是://*[@id=“kw”]或者可以將id換爲其他的屬性信息也可以;

  • 通過css selector定位
    實現腳本:
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
driver.find_element_by_css_selector("#kw").send_keys("布拉格")
driver.find_element_by_id("su").click()#通過id定位到百度搜索框,點擊
time.sleep(8)#等待8秒
driver.quit()

這裏百度輸入框css selector的寫法是#id,也可以使用.class,例如:

driver.find_element_by_css_selector(".s_ipt").send_keys("布拉格")

具體的寫法有很多,這裏我就列舉了,可以自行去查;

  • 通過link text定位
    有時候不是一個輸入框,而是一個文字鏈接,可以通過link text進行點擊這個鏈接,例如實現腳本
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
driver.find_element_by_link_text("hao123").click()
time.sleep(8)#等待8秒
driver.quit()

就可點擊百度頁面上的hao123這個文字鏈接,link text是全部鏈接定位(即輸入文字鏈接全名)

  • partiial link text定位
    它是部分鏈接定位,例如實現腳本:
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
driver.find_element_by_partial_link_text("hao").click()
time.sleep(8)#等待8秒
driver.quit()

也可以點擊百度頁面上的hao123這個文字鏈接,partial link text是部分鏈接定位(即輸入文字鏈接部分名字,但是我們一定要注意唯一性)

操作測試對象

一般來說操作測試對象比較常用的方法有:

click:點擊對象
send_keys:在對象上模擬按鍵輸入
clear:清除對象內容(若可以)
submit:提交對象內容(若可以)
text:獲取元素的文本信息

click和send_keys我們就不用介紹了,上面已經模擬過;

  • clear
    例如實現代碼:
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
driver.find_element_by_id("kw").send_keys("布拉格")
driver.find_element_by_id("su").click()
time.sleep(5)
driver.find_element_by_id("kw").clear()
time.sleep(8)#等待8秒
driver.quit()

它的運行結果就是先在百度輸入框中輸入布拉格進行搜索,5秒後清除掉輸入框中的內容;

  • submit
    submit的作用是提交表單,可以將click換成submit可以達到相同的結果;
  • text
    text輸出頁面所指的文本,例如我們定位如圖文本:
    在這裏插入圖片描述
    它的id是s-bottom-layer-right,實現腳本:
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
time.sleep(3)
data=driver.find_element_by_id("s-bottom-layer-right").text
print(data)
time.sleep(8)#等待8秒
driver.quit()

它的運行結果就是:
在這裏插入圖片描述
可以看到輸出了對應文本。

添加等待
  • 固定等待
    我們只需要導入time包,就可以實現等待了,固定等待就是使用sleep函數,例如time.sleep(4)就是不管有沒有加載都要等待4秒
  • 智能等待
    智能等待就是使用implicitly_wait()函數,例如driver.implicitly_wait(4)就是表示一旦察覺到加載,就去觸發而不是一定等4秒。
    固定等待和智能等待的區別在於一個是必須等待這段時間,而智能等待是一旦觸發就不用等待這麼多時間了,例如實現腳本:
driver.find_element_by_id("kw").send_keys("布拉格")
driver.find_element_by_id("su").click()
#time.sleep(8)#固定等待8秒
driver.implicitly_wait(8)
driver.find_element_by_link_text("布拉格_百度百科").click()
time.sleep(3)
driver.quit()

如果是固定等待就是等待8秒後才觸發布拉格_百度百科,而智能等待就是等待在百度百科可以定位後就停止等待;

打印信息

打印title和url,例如實現腳本:

from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
t=driver.title
print(t)#打印title
t=driver.current_url
print(t)#打印url
time.sleep(3)
driver.quit()

它的運行結果就是如圖:

在這裏插入圖片描述
可以看出打印出來title和url

瀏覽器操作
  • 瀏覽器最大化
    我們進行測試啓動的瀏覽器並不是最大化窗口,可以在進入頁面後最大化,實現腳本:
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
driver.maximize_window()
  • 設置瀏覽器寬高
    我們可以根據自己的喜好調整瀏覽器頁面的大小,例如實現腳本:
driver.set_window_size(480,800)#將寬設爲480,高設爲800
  • 操作瀏覽器的前進和後退
    瀏覽器頁面有前進後退按鈕,我們可以操作,實現腳本:
from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
driver.find_element_by_id("kw").send_keys("布拉格")
driver.find_element_by_id("su").click()
time.sleep(8)
driver.back()
time.sleep(6)
driver.quit()

它的運行結果就是先輸入布拉格,然後點擊搜索,在8秒後回退;
又例如實現腳本:

from selenium import webdriver
import time
driver=webdriver.Firefox()#對應瀏覽器
driver.get("https://www.baidu.com/")#打開百度搜索框
driver.find_element_by_id("kw").send_keys("布拉格")
driver.find_element_by_id("su").click()
time.sleep(8)
driver.back()#後退
time.sleep(3)
driver.forward()#前進
time.sleep(6)
driver.quit()

它的運行結果就是先輸入布拉格並點擊搜索然後回退然後前進;

  • 控制瀏覽器滾動條
    實現腳本:
js="var q=document.documentElement.scrollTop=10000"#將頁面滾動條滾到底部
driver.execute_script(js)
time.sleep(6)
js="var q=document.documentElement.scrollTop=0"#將頁面滾動條滾到頂部
driver.execute_script(js)
time.sleep(6)

execute_script(script,*args)表示在當前窗口/框架同步執行JavaScript。

  • 鍵盤按鍵
    實現腳本:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("布拉格")#輸入框輸入內容
time.sleep(3)
driver.find_element_by_id("kw").send_keys(Keys.ENTER)#按enter鍵表示開始搜索
#driver.find_element_by_id("kw").send_keys(Keys.TAB)#按Tab鍵表示清除了默認提示信息
time.sleep(8)

它的運行結果就是在百度輸入框輸入布拉格,然後三秒後實現enter鍵進行搜索;

  • 鍵盤組合鍵
    我們一般常用的組合鍵有ctrl+a表示全選、ctrl+c表示複製、ctrl+v表示粘貼,ctrl+x表示剪切等,例如實現腳本:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").send_keys("布拉格")#輸入框輸入內容
time.sleep(4)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')#全選輸入框的內容
time.sleep(4)
driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'x')#剪切輸入框內容
time.sleep(4)
#輸入框重新輸入內容
driver.find_element_by_id("kw").send_keys("巴黎")
driver.find_element_by_id("su").click()
time.sleep(8)

它的運行結果是先在輸入框中輸入了布拉格,然後將它全選,然後剪切,然後重新向輸入框中輸入了巴黎並且點擊搜索

  • 鼠標事件
    實現鼠標事件要導入ActionChains包,它的主要方法有:

context_click():點擊
double_click():雙擊
drag_and_drop():拖動
move_to_element():移動

實現腳本:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys#要實現鍵盤事件要導入Keys包
from selenium.webdriver.common.action_chains import ActionChains#要實現鼠標事件要導入ActionChains包
import time
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
#測試鼠標事件
driver.find_element_by_id("kw").send_keys("布拉格")
data=driver.find_element_by_id("su")#定位搜索框
ActionChains(driver).context_click(data).perform()#右鍵
time.sleep(6)
ActionChains(driver).double_click(data).perform()#雙擊
time.sleep(6)
#定位元素原位置
element=driver.find_element_by_link_text("布拉格_百度百科")
#定位元素要移動到的目標位置
target=driver.find_element_by_id("su")
#拖動:title爲原位置,target爲拖動的目標位置
ActionChains(driver).drag_and_drop(element,target).perform()
time.sleep(8)
driver.quit()

他實現的就是在輸入框輸入布拉格,然後定位到百度搜索框,右鍵點擊,然後雙擊顯示出頁面(這裏雙擊和單擊的效果是一樣的),然後將布拉格_百度百科拖拽到搜索框(當然這裏是拖動不了的,只是表達這個意思)

  • 定位一組元素
    webdriver可以使用findElement方法來定位某個對象,但是有時候我們需要定位一組對象,這時就需要用到findElements方法。
    例如我們有一個CheckBox頁面,需要將頁面上所有的CheckBox都勾上,因此需要先獲取一組對象,再在這組對象中過濾出來需要具體定位的一些對象,例如我們先使用HTML語言實現一個CheckBox界面,如圖:
    在這裏插入圖片描述
    它有三個複選框和兩個單選框,我們需要定位這三個複選框,實現腳本:
from selenium import webdriver
import os
import time
driver = webdriver.Firefox()
#先獲取到HTML頁面路徑
file_path='file:///'+os.path.abspath("E:\\selenium腳本\\-Python-\\CheckBox.HTML")
driver.get(file_path)
inputs=driver.find_elements_by_tag_name("input")#通過tagname定位到所有的對象
time.sleep(8)
#開始過濾,得到需要具體定位的控件
for i in inputs:
    if i.get_attribute('type')=="checkbox":#拿到複選框
        i.click()
time.sleep(8)
driver.quit()

他的運行結果就是先通過瀏覽器打開了上圖的HTML頁面,然後先通過tag_name定位到所有的控件(包含3個複選框和兩個單選框),然後進行for循環在這些控件中它的屬性一旦是複選框 (checkbox),就點擊打鉤即可,最終實現頁面就是:
在這裏插入圖片描述
get_attribute的作用是獲得屬性值;值得注意的是要使用瀏覽器打開我們的本地HTML頁面時,必須要加上file:///,這是一個標準。

  • 多層框架/窗口定位
    有時候我們會遇到多層框架的情況,這樣就無法直接使用find_element系列的方法來對元素準確定位,selenium webdriver提供了switch_to_frame方法,(現在已經變爲switch_to.frame方法),來可以準確定位,例如我們有一個HTML多層框架頁面,如圖:
    在這裏插入圖片描述
    我們這時要在第二層頁面即百度搜索頁面進行操作,但是沒有辦法定位到,因此要使用多層框架定位方法,如圖先定位到第一層框架,如圖:
    在這裏插入圖片描述
    它的id是f1,再定位第二層框架是無法精準定位的,但是我們可以看到下面第二層的id是f2,
    實現腳本:
from selenium import webdriver
import os
import time
driver = webdriver.Firefox()
file_path = 'file:///'+os.path.abspath('E:\\selenium腳本\\-Python-\\frame.HTML')
driver.get(file_path)
driver.implicitly_wait(20)
#先找到框架1
driver.switch_to.frame("f1")
#再找到框架2
driver.switch_to.frame("f2")
#可以正常操作元素了
driver.find_element_by_id("kw").send_keys("布拉格")
driver.find_element_by_id("su").click()
#但是這裏不能又跳回f1,因爲這裏相當於在f2中找f1,是找不到的
#driver.switch_to.frame("f1")
time.sleep(8)
driver.quit()

注意:在click之後,不能又跳回f1,因爲就相當於在f2中找f1,是找不到的此時它的運行結果就是:
在這裏插入圖片描述
如果想要從f2跳回到f1,此時可以實現腳本:

from selenium import webdriver
import os
import time
driver = webdriver.Firefox()
file_path = 'file:///'+os.path.abspath('E:\\selenium腳本\\-Python-\\frame.HTML')
driver.get(file_path)
driver.implicitly_wait(20)
#先找到框架1
driver.switch_to.frame("f1")
#再找到框架2
driver.switch_to.frame("f2")
#可以正常操作元素了
driver.find_element_by_id("kw").send_keys("布拉格")
driver.find_element_by_id("su").click()
#但是這裏不能又跳回f1,因爲這裏相當於在f2中找f1,是找不到的
#driver.switch_to.frame("f1")
#要是想跳回f1,可以使用以下方法
driver.switch_to.default_content()#跳回到原來的默認頁面
#在這個默認頁面找f1
driver.switch_to.frame("f1")
driver.find_element_by_link_text("click").click()
time.sleep(8)
driver.quit()

我們要注意的是多層框架是一層一層進行跳轉的。
__多層窗口定位__是針對有可能嵌套的不是框架,而是窗口,因此這裏會使用switch_to.window的方法,用法與多層框架一樣;

  • 層級定位
    如圖我們實現了這樣一個HTML頁面:
    在這裏插入圖片描述
    點擊了link1,可以出現上面的下拉菜單,此時我們的定位思路就是:
    先定位link1,點擊顯示1個下拉菜單,然後要定位到該菜單的url,然後再定位到這個url下的某個具體的link,即下圖的順序:
    第一步:先定位到link1並且點擊link1鏈接,彈出下拉菜單在這裏插入圖片描述
    第二步:找到下拉菜單的id,如圖它的id是dropdown1
    在這裏插入圖片描述
    第三步:在下拉菜單下找到link爲Action的子元素
    在這裏插入圖片描述
    實現腳本:
from selenium import webdriver
import os
import time
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Firefox()
file_path='file:///'+os.path.abspath("E:\\selenium腳本\\-Python-\\level_locate.HTML")
driver.get(file_path)
#第一步,定位到Link1並點擊鏈接
driver.find_element_by_link_text("Link1").click()
driver.implicitly_wait(10)
#第二步,定位到下拉菜單url,第三步定位到Action
list=driver.find_element_by_id("dropdown1").find_element_by_link_text("Action")
#將鼠標移到定位到Action的元素上(也就是list上)
ActionChains(driver).move_to_element(list).perform()
time.sleep(5)
driver.quit()

它可以很好地實現上述需要的層級定位

  • 下拉框處理
    對於一般的對象,我們只需要一次就可以定位到,但是下拉框中的內容需要先定位到下拉框,再定位到下拉框中的選項,例如我們有一個HTML頁面,如圖:
    在這裏插入圖片描述
    我們要定位到下拉框中的$10.69,可以實現腳本:
from selenium import webdriver
import os
import time
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Firefox()
file_path='file:///'+os.path.abspath("E:\\selenium腳本\\-Python-\\drop_down.HTML")
driver.get(file_path)
#第三種等待方式,表示每隔500毫秒掃描一次,等待10秒直到ShippingMethod元素被加載出來,
WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("ShippingMethod
#先定位到下拉框
ship=driver.find_element_by_id("ShippingMethod")
#在下拉框中定位$3.20
#這裏使用xpath進行定位
ship.find_element_by_xpath("//*[@value='10.69']").click()
time.sleep(8)
driver.quit()

最終的運行結果就是:
在這裏插入圖片描述
當然我們還可以有第二種方式,就是先定位這組option,然後在這一組option中遍歷,通過get_attribute方法得到屬性信息,那個屬性信息的value是10.69,就可以點擊了(當然也有一種方式,就是這組option中10.69是第三個,也就是lists[2],直接click即可),實現腳本:

from selenium import webdriver
import os
import time
from selenium.webdriver.support.ui import WebDriverWait
driver = webdriver.Firefox()
file_path='file:///'+os.path.abspath("E:\\selenium腳本\\-Python-\\drop_down.HTML")
driver.get(file_path)
#第三種等待方式,表示每隔500毫秒掃描一次,等待10秒直到ShippingMethod元素被加載出來,
WebDriverWait(driver,10).until(lambda driver:driver.find_element_by_id("ShippingMethod
#方法2
#先將所有的option標籤定位,也就是定位一組元素
lists=driver.find_elements_by_tag_name("option")
#再在這組元素中找到value爲10.96的
for i in lists:
    if i.get_attribute('value')=="10.69":
        i.click()
time.sleep(8)
driver.quit()

當然因爲10。69在這組元素的第三個,也就是lists[2],因此直接click即可

#方法3
lists=driver.find_elements_by_tag_name("option")
lists[2].click()
time.sleep(8)
driver.quit()

這裏有第三種等待方式WebDriverWait(driver,t)表示每隔500毫秒掃描一次等待t秒直到有某個元素加載;

  • alter、confirm、prompt的處理
    對於alert框,我們有以下幾種方法:
    text返回alert/confirm/prompt中的文字信息;
    accept點擊確認按鈕;
    dismiss點擊取消按鈕(如果存在)
    send_keys輸入值,在alert/confirm沒有對話框時就不能用了,否則會報錯
    switch_to.alert()獲得操作這個框的去冰,並且只能處理原生的alert
    例如我們有一個HTML頁面,顯示alert框,如圖:
    在這裏插入圖片描述
    此時我們查看alert框的屬性信息,如圖:
    在這裏插入圖片描述
    它的id是tooltip,此時我們想要接收警告信息,可以使用accept方法,實現腳本:
from selenium import webdriver
import os
import time
driver = webdriver.Firefox()
file_path = "file:///"+os.path.abspath("E:\\selenium腳本\\-Python-\\alert.HTML")
driver.get(file_path)
#先定位到alert框並點擊彈出alert
driver.find_element_by_id("tooltip").click()
time.sleep(6)
alert = driver.switch_to.alert
#接收警告信息
alert.accept()
time.sleep(8)
driver.quit()

此時它的運行結果就是:
在這裏插入圖片描述
可以打印出alert框的內容,實現腳本:

from selenium import webdriver
import os
import time
driver = webdriver.Firefox()
file_path = "file:///"+os.path.abspath("E:\\selenium腳本\\-Python-\\alert.HTML")
driver.get(file_path)
#先定位到alert框並點擊彈出alert
driver.find_element_by_id("tooltip").click()
time.sleep(6)
alert = driver.switch_to.alert
#得到文本信息並且打印
print (alert.text)

結果就是:
在這裏插入圖片描述
打印出來了文本信息
也可以通過dismiss方法取消對話框,即:

alert.dismiss()

此時我們有一個有對話框的HTML頁面,有alert框,有輸入框,如圖:
在這裏插入圖片描述
點擊之後就出來了輸入框
在這裏插入圖片描述
這時我們想要輸入內容,然後顯示前端實現的內容,例如實現腳本:

from selenium import webdriver
import os
import time
driver = webdriver.Firefox()
file_path = "file:///"+os.path.abspath("E:\\selenium腳本\\-Python-\\send.HTML")
driver.get(file_path)
driver.find_element_by_xpath("/html/body/input").click()#先定位到“請點擊”按鈕的句柄,點擊就可以彈出輸入框
alert = driver.switch_to.alert
alert.send_keys(u"王一博")#輸入內容
# 然後可以顯示出確認信息,顯示出前端設計的效果
alert.accept()
time.sleep(8)
driver.quit()

最終的運行結果就是:
在這裏插入圖片描述

  • DIV對話框的處理
    在實際應用中我們可能不會遇到簡單的警告框,而是提供更多功能的對話框,如圖爲一個div對話框:
    在這裏插入圖片描述
    點擊click之後顯示:
    在這裏插入圖片描述
    我們此時查看屬性信息,如圖是click這個按鈕的屬性信息:
    在這裏插入圖片描述
    通過他的id:show_modal來定位,進行點擊;
    然後點擊過後彈出model header的對話框,如圖:
    在這裏插入圖片描述
    可以看到有多個div,因此要先定位到具體然後我們可以通過class_name定位到modal-body;
    然後我們想要點擊click me,他的屬性信息如圖:
    在這裏插入圖片描述
    他的id爲click,此時使用腳本實現點擊click me;
    然後我們想要點擊close關閉這個對話框,此時它的屬性信息是:
    在這裏插入圖片描述這裏有兩個button,close是這一組button中第一個,因此就是buttons[0].click()就可以關閉
    實現腳本:
from selenium import webdriver
import os
import time
driver = webdriver.Firefox()
file_path = "file://" +os.path.abspath("E:\\selenium腳本\\-Python-\\modal.HTML")
driver.get(file_path)
#先定位到click按鈕並點擊
driver.find_element_by_id("show_modal").click()
#顯示出對話框後先定位到modal body
div1 = driver.find_element_by_class_name("modal-body")
time.sleep(3)
#在modal-body中定位click me並點擊
div1.find_element_by_id("click").click()
#定位到close並且點擊
#這裏有兩個button,close是這一組button中第一個,因此就是buttons[0]
buttons=driver.find_elements_by_tag_name("button")
buttons[0].click()
time.sleep(8)
driver.quit()
  • 上傳文件操作
    上傳文件操作關鍵是思路,上傳過程一般是打開本地窗口,從窗口中選擇本地文件添加,只要定位上傳按鈕,通過send_keys添加本地路徑就可以了(注意上傳的文件一定要存在)
    如圖爲上傳文件HTML頁面
    在這裏插入圖片描述
    點擊瀏覽就可以選擇上傳文件,此時我們進行定位,查看屬性信息,如圖:
    在這裏插入圖片描述
    瀏覽按鈕的type是file,可以進行定位,實現腳本:
from selenium import webdriver
import time
import os
driver = webdriver.Firefox()
file_path = "file:///"+os.path.abspath("E:\\selenium腳本\\-Python-\\upload.HTML")
driver.get(file_path)
driver.find_element_by_name("file").send_keys("F:\\1.jpg")#絕對路徑
time.sleep(8)
driver.quit()

上傳的就是1.jpg這個圖片,運行結果如圖:
在這裏插入圖片描述

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