Web 文件上传弹框处理
简介
在有些场景中,需要上传文件,而 Selenium 无法定位到弹出的文件框,以及网页弹出的提醒。这些都是需要特殊的方式来处理。
在有些场景中,需要上传文件,而 Selenium 无法定位到弹出的文件框,以及网页弹出的提醒。这些都是需要特殊的方式来处理。
⽂件上传
driver.find_element(By.CSS_SELECTOR, "#ww_fileInput js_file")\
.send_keys("./hogwarts.png")
input 标签使用自动化上传,先定位到上传按钮,然后 send keys 指定要上传的文件路径 把路径作为值给传进去。 如图所示,是企业微信文件上传的页面定位到标签为 input,type 为 file 的元素信息,然后使用 send keys 把文件路径作为值给传进去。
弹窗处理
操作弹窗常用的方法:
-
switch_to.alert()
:获取当前页面上的警告框。 -
text
:返回 alert、confirm、prompt 中的文字信息。 -
accept()
:接受现有警告框,即点击确定。 -
dismiss()
:解散现有警告框,即点击取消。 -
send_keys(keysToSend)
:发送文本至警告框。keysToSend
:将文本发送至警告框。
在页面操作中有时会遇到 JavaScript 所生成的 alert、confirm 以及 prompt 弹框,可以使用switch_to.alert()
方法定位到。然后使用 text、accept、dismiss、send_keys 等方法进行操作。
alert 弹框
"""Alert弹窗获取文本与确认操作"""
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
def test_alert():
driver = webdriver.Chrome()
driver.get("http://sahitest.com/demo/alertTest.htm")
driver.find_element(By.NAME, "b1").click()
# 添加显式等待,等待弹框的出现
WebDriverWait(driver, 5, 0.5).until(ec.alert_is_present())
# 切换到弹框
alert = driver.switch_to.alert
# 打印弹框的文本
print(alert.text)
# 点击确定
alert.accept()
我们来看一下弹框怎么处理,当我们提交一个数据的时候,页面会提示提交成功或者失败,这个时候我们需要先切换到当前的 alert,然后选择确定还是取消操作。
confirm 弹框
"""confirm 弹窗获取文本、确认、取消操作"""
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.wait import WebDriverWait
def test_confirm():
driver = webdriver.Chrome()
driver.get("http://sahitest.com/demo/confirmTest.htm")
driver.find_element(By.NAME,"b1").click()
#添加显式等待,等待弹框的出现
WebDriverWait(driver, 5).until(ec.alert_is_present())
#切换到弹框
alert = driver.switch_to.alert
#向弹框输入一段文本
alert.send_keys('Selenium Alert弹出窗口输入信息')
#点击确定
alert.accept()
#点击取消
#alert.dismiss()
confirm 弹框一般会有两个选项,确定或者取消,当我们想要点击确定按钮我们可以调用accept 方法点击确定,dismiss 方法点击取消。
prompt 弹框
"""prompt弹窗获取文本、确认、取消、输入文本操作"""
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
def test_prompt():
driver = webdriver.Chrome()
driver.get("http://sahitest.com/demo/promptTest.htm")
driver.find_element(By.NAME,"b1").click()
# 等待弹出窗口出现
WebDriverWait(driver, 5).until(ec.alert_is_present())
#切换到弹框
alert = driver.switch_to.alert
#点击确定
# alert.accept()
# time.sleep(2)
alert.send_keys('xxx')
#点击取消
alert.dismiss()
time.sleep(2)
prompt 弹框向用户显示一条消息,并提供一个输入框供用户输入文本,同时有“确定”和“取消”按钮。当我们想要输入内容的时候,直接调用 alert点send_keys加文本即可。