文章目錄
- 一、元素的四大操作
- 二、三大切換&等待
- 1、切換窗口:當定位的元素不在當前窗口,則需要切換窗口
- 2、切換iframe:當定位的元素在frame/iframe,則需要切換
- 3、切換彈出窗口
一、元素的四大操作
1、輸入
2、點擊
3、獲取文本
4、獲取屬性
import time
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver=webdriver.Edge()
driver.get("http://www.baidu.com")
time.sleep(2)
el1=driver.find_element(By.ID,"kw")
# 輸入
el1.send_keys()
# 點擊
el1.click()
# 獲取元素文本內容
el2=driver.find_element(By.LINK_TEXT,"新聞")
print("打印該元素的文本內容:",el2.text)
# 獲取元素的屬性
print("獲取autocomplete屬性值:",el1.get_attribute("autocomplete"))
二、三大切換&等待
元素定位不到可能的原因:
- 1、定位語句不對
- 2、是否加等待
- 3、元素嵌套在iframe/frame元素標簽中(切換frame);多層嵌套frame/iframe
- 4、要定位的元素非當前窗口(切換句柄)
1、切換窗口:當定位的元素不在當前窗口,則需要切換窗口
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
"""
元素等待:
1、強制等待 time.sleep(秒數) 停留
2、智能等待(隱士等待) driver.implicitly_wait(秒數) 給頁面上所有的元素設置全
局等待時間
只要在設置的時間范圍內找到了元素,就會執行下一個代碼,最多等待設置的時間
3、顯示等待 顯示等待:等待當前需要操作的元素 基于多種條件+等待元素
多種條件:等待元素可見?等待url跳轉為xxx?等待新窗口出現?很多場景條件
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
自動化測試框架腳本:
以顯示等待為主
以強制等待為輔
"""driver=webdriver.Edge()
# 智能等待
# driver.implicitly_wait(10)
driver.get("https://www.baidu.com")
# 輸入搜索內容
el1=driver.find_element(By.ID,"kw")
el1.send_keys("chrome")
#點擊百度一下
el2=driver.find_element(By.ID,'su')
el2.click()
# 顯示等待
loc=(By.XPATH,'//*[@id="2"]/div/h3/a')
# 等待元素存在
WebDriverWait(driver,15,1).until(ec.presence_of_element_located(loc))
# 點擊搜索的內容
el3=driver.find_element(*loc)
el3.click()
# 新打開的窗口里面定位元素 需要切換窗口
# 獲取瀏覽器窗口列表 最早打開的窗口放到list的最前面
wins=driver.window_handles
print(wins)
# 切換最后打開的窗口
driver.switch_to.window(wins[1])
el4=driver.find_element(By.XPATH,'//*[@id="J-lemma-main-wrapper"]/div[2]/div/div[1]/div/div[2]/div[1]/div/a[1]')
el4.click()
# 為了看到效果
time.sleep(3)
driver.close()
2、切換iframe:當定位的元素在frame/iframe,則需要切換
"""
定位的元素包含在iframe/frame標簽里面
切換到iframe/frame
"""
import time
from selenium.webdriver.support import expected_conditions as ecfrom selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWaitdriver=webdriver.Edge()
driver.get("https://www.csdn.net/")
driver.implicitly_wait(5)
driver.find_element(By.XPATH,'//a[@class="toolbar-btn-loginfun"]').click()
time.sleep(2)
# 切換iframe 方式一:id
# driver.switch_to.frame("id")
# 切換iframe 方式二:索引 索引值從0開始
# driver.switch_to.frame(3)
# 切換iframe 方式三:找到iframe元素
driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@id="passportbox"]/iframe'))
# 再定位元素
driver.find_element(By.XPATH,'/html/body/div/div/div/div[2]/div[2]/div[1]/div[1]/span[3]').click()
time.sleep(2)
driver.close()
# # 切換當前 iframe/frame 上一級 iframe/frame 元素
# driver.switch_to.parent_frame()
# # 返回第一代 iframe/frame
# driver.switch_to.default_content()
3、切換彈出窗口
彈窗處理: driver.switch_to.alert
import time
from selenium.webdriver.common.by import By
from selenium import webdriverdriver=webdriver.Edge()
driver.get(r"E:/Notepad++/test3.html")el=driver.find_element(By.XPATH,"/html/body/form[1]/input[6]")
time.sleep(2)
el.click()
# 彈窗進行處理
alert=driver.switch_to.alert
print(alert.text)
# 點擊確認
time.sleep(2)
alert.accept()time.sleep(2)
driver.close()
注:E:/Notepad++/test3.html 文件內容見 Web 自動化之 HTML & JavaScript 詳解 中的二、javascript 腳本代碼