Selenium文件上传弹框处理

一、简介

  • 有些场景中,需要上传文件,而Selenium无法定位到弹出的文件框,以及网页弹出的提醒。这些都需要特殊的方式来处理。

二、文件上传

  • input标签使用自动化上传,先定位到上传按钮,然后send_keys(指定要上传的文件路径)把路径作为值给传进去。

  • 如图所示,是企业微信文件上传的页面定位到标签为input、type为file的元素信息,然后使用send_keys把文件路径作为值给传进去。
  • Python语法:
driver.find_element(By.CSS_SELECTOR,"#ww_fileInput js_file")\
       .send_keys("./hogwarts.png")

三、弹窗处理

  • 在页面操作中有时会遇到JavaScript所生成的alert、confirm以及prompt弹框,可以使用switch_to.alert()方法定位到。然后使用text、accept、dismiss、send_keys等方法来操作。

  • 操作弹窗的常用方法:

  1. switch_to.alert():获取当前页面上的警告框。
  2. text:返回alert、confirm、prompt中的文字信息。
  3. accept():接受现有警告框,即点击确定。
  4. dismiss():解散现有警告框,即点击取消。
  5. send_keys(keysToSend):发送文本至警告框。keysToSend是指要发送的文本。

3.1 alert弹框

  • 输入一段文本点击比如提交按钮,会弹出确认内容的弹框。这种场景可以使用下面的方式处理:

  • Python语法:

"""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.swithch_to.alert
      # 打印弹框的文本
      print(alert.text)
      # 点击确定
      alert.accept()
      # 点击取消啊或者关闭弹框
      alert.dismiss()

3.2 confirm弹框

  • Python语法:
"""confirm弹框获取文本、确认、取消操作"""
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_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()

3.3 prompt弹框

  • Python语法:
"""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.send_keys("Selenium Alert弹出窗口输入信息。")
      # 点击确定
      alert.accept()