文件上传
首先定位到上传图片的元素,通常是input标签,type为file,然后将文件路径用send_keys()方法传入。以百度搜索页为例:
手动操作步骤
1、点击搜索框右侧相机按钮
2、点击选择文件按钮,弹窗选择要上传的本地图片
3、识别图片后,页面刷新显示搜索结果,title由"百度一下"变成"百度识图搜索结果"
脚本实现自动化
接下来按照手动化测试的步骤用脚本实现:
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def file_upload_demo():
# 初始化WebDriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 等待网页加载并找到搜索框右侧的相机按钮
camera_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.CLASS_NAME, "soutu-btn"))
)
camera_btn.click()
# 等待选择文件按钮出现
file_input = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, "upload-pic"))
)
# 发送文件路径到文件上传输入框
file_path = "E:/PyProjects/SoftWare_test/wx_icon.jpg"
file_input.send_keys(file_path)
# # 等待页面标题变成"百度视图搜索结果"
WebDriverWait(driver, 10).until(
EC.title_contains("百度识图搜索结果")
)
# driver.close()
time.sleep(3)
driver.quit()
file_upload_demo()
弹窗处理
在页面测试操作中,有时会遇到JS生成的Alert、Confirm及Prompt弹窗,可以使用JS的switch_to.alert()方法定位到这些弹窗。然后使用text、accept、dismiss、send_keys等方法对弹窗进行操作。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def alert_demo():
# 初始化WebDriver
driver = webdriver.Chrome()
driver.get("https://www.example.com")
### 处理简单弹窗(Alert)
# 触发简单弹窗
trigger_alert_btn = driver.find_element(By.ID, "trigger-alert")
trigger_alert_btn.click()
# 等待简单弹窗出现
WebDriverWait(driver, 10).until(EC.alert_is_present())
# 切换到简单弹窗并处理
alert = driver.switch_to.alert
# print(f"Alert text:{alert.text}")
alert.accept() # 点击确认按钮
### 处理确认弹窗(Confirm)
# 触发简单弹窗
trigger_confirm_btn = driver.find_element(By.ID, "trigger-confirm")
trigger_confirm_btn.click()
# 等待确认弹窗出现
WebDriverWait(driver, 10).until(EC.alert_is_present())
# 切换到确认弹窗并处理
confirm = driver.switch_to.alert
# print(f"Confirm text:{confirm.text}")
confirm.accept() # 点击确认按钮
# confirm.dismiss() # 点击取消按钮
### 处理提示弹窗(Prompt)
# 触发提示弹窗
trigger_prompt_btn = driver.find_element(By.ID, "trigger-prompt")
trigger_prompt_btn.click()
# 等待提示弹窗出现
WebDriverWait(driver, 10).until(EC.alert_is_present())
# 切换到提示弹窗并处理
prompt = driver.switch_to.alert
print(f"Prompt text:{prompt.text}")
prompt.send_keys("Selenium") # 输入文本
prompt.accept() # 点击确认按钮
# prompt.dismiss() # 点击取消按钮
driver.quit()
alert_demo()