自学内容网 自学内容网

快速学习selenium基础操作

 全篇大概19000字(含代码),建议阅读时间1h


什么是Selenium?

Selenium是一系列自动化工具集的统称,官方工具有 Selenium IDE、Selenium WebDriver、Selenium Grid, 主要用于桌面端Web应用程序的自动化。能够通过多种方式定位界面元素、操作元素并获取元素的各项信息。

自动化测试四个象限

  1. 面向技术和指导开发:集成测试、组件测试、单元测试。(完全自动化)
  2. 面向业务和指导开发:功能测试、原型测试。(部分自动化)
  3. 面向业务和评估产品:探索式测试、用户演示、可用性测试(手工测试)
  4. 面向技术和评估产品:性能测试、安全性测试、可靠性测试、各种非功能性测试。(能否自动化取决于场景)

工具集

  1. Selenium IDE 用于在浏览器中进行录制与回放测试的操作。(开箱即用、易于调试、跨浏览器)
  2. Selenium WebDriver 在本地或远程计算机上以原生方式驱动浏览器。(简洁明快、支持全部主流浏览器、W3C标准)
  3. Selenium Grid 支持多台机器同时运行多个基于WebDriver 测试,减少在多浏览器和多操作系统上测试耗费时间。(支持多浏览器、多版本及多操作系统、大幅缩短执行时间)
  4. Appium 用于移动设备原生App 及 Web应用程序的自动化测试。

一、Selenium WebDriver

WebDriver、驱动程序、浏览器之间的关系

二、安装selenium库

通过使用pip进行安装selenium库。

pip install selenium

测试代码 

from selenium import webdriver
from selenium.webdriver.common.by import By # by 类

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")         # 打开百度页面
driver.find_element(By.ID, "kw").click()    # 单击搜索文本框
driver.find_element(By.ID, "kw").send_keys("hello world")   # 输入 hello world
driver.find_element(By.ID, "su").click()    # 单击百度一下按钮
driver.quit()   # 关闭浏览器

三、浏览器基础操作

3.1 依次打开浏览器

from selenium import webdriver

chrome = webdriver.Chrome()     # 打开Chrome
firefox = webdriver.Firefox()   # 打开Firefox
edge = webdriver.Edge()         # 打开Edge
ie = webdriver.Ie()             # 打开IE
opera = webdriver.Opera()       # 打开Opera

3.2 浏览器导航操作

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
3.3 浏览器3种操作

1. back() 后退

2. forward() 前进

3. refresh() 刷新

四、浏览器窗口操作

4.1 窗口基础操作

1. minimize_window() 最小化窗口

2. maximize_window() 最大化窗口

3. close() 关闭窗口

4. set_window_position(坐标x, 坐标y) 将浏览器窗口移动到指定位置

5. set_window_size(宽度像素, 高度像素) 将浏览器窗口设置为指定大小

6. set_window_rect(坐标x, 坐标y, 宽度像素, 高度像素) 将浏览器窗口移动到指定位置,并设置窗口大小

测试代码

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.set_window_position(0, 0)    # 移动到屏幕左上角
time.sleep(3)   # 休眠3s
driver.set_window_size(500, 300)    # 设置窗口大小500*300
time.sleep(3)   # 休眠3s
driver.set_window_rect(100, 200, 600, 400)  
# 移动到屏幕左侧 100像素,屏幕上200像素,设置600*400

4.2 获取浏览器信息

1. title 获取浏览器窗口当前的标题

2. current_url 获取浏览器窗口当前的网址

测试代码

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

print("浏览器标题:", driver.title)
print("浏览器网址:", driver.current_url)

1. get_window_position() 获取位置对象

2. get_window_position()["x"] 获取X轴坐标值

3. get_window_position()["y"] 获取Y轴坐标值

4. get_window_size() 获取大小对象

5. get_window_size()["width"] 获取宽度值

6. get_window_size()["height"] 获取高度值

7. get_window_rect() 获取位置及大小对象

8. get_window_rect()["x"] 获取x坐标值

9. get_window_rect()["y"] 获取y坐标值

10. get_window_rect()["width"] 获取宽度值

11. get_window_rect()["height"] 获取高度值

测试代码

from selenium import webdriver

driver = webdriver.Chrome()

print("获取位置对象: ", driver.get_window_position())
print("获取位置坐标x值: ", driver.get_window_position()["x"])
print("获取位置坐标y值: ", driver.get_window_position()["y"])

print("获取大小对象: ", driver.get_window_size())
print("获取宽度值: ", driver.get_window_size()["width"])
print("获取高度值: ", driver.get_window_size()["height"])

print("获取位置及大小对象: ", driver.get_window_rect())
print("获取位置坐标x值: ", driver.get_window_rect()["x"])
print("获取位置坐标y值: ", driver.get_window_rect()["y"])
print("获取宽度值: ", driver.get_window_rect()["width"])
print("获取高度值: ", driver.get_window_rect()["height"])

五、查找页面元素

5.1 通过By对象进行动态查找

1. from selenium.webdriver.common.by import By

2. find_element(By.查找条件, "条件值")

  • By.ID
  • By.NAME
  • By.CLASS_NAME
  • By.LINK_TEXT
  • By.PARTIAL_LINK_TEXT
  • By.TAG_NAME
  • By.XPATH
  • By.CSS_SELECTOR

5.2 按id属性查找

find_element(By.ID, "id属性值") 根据id属性查找元素

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
searchTextBox = driver.find_element(By.ID, "kw")    # 根据ID查找元素
searchTextBox.send_keys("找到文本框")    # 在文本框中输入 "找到文本框"

5.3 按name属性查找

find_element(By.NAME, "name属性值")

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
searchTextBox = driver.find_element(By.NAME, "wd")
searchTextBox.send_keys("找到文本框")

5.4 按链接文本查找

find_element(By.LINK_TEXT, "链接文本")

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
link = driver.find_element(By.LINK_TEXT, "贴吧")
link.click()

5.5 按链接文本进行模糊查找

find_element(By.PARTIAL_LINK_TEXT, "贴")

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
link = driver.find_element(By.PARTIAL_LINK_TEXT, "贴")
link.click()

5.6 按标签类型查找

find_element(By.TAG_NAME)

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
inputText = driver.find_element(By.TAG_NAME, "input")   # 查找首个 input 标签
link = driver.find_element(By.TAG_NAME, "a")       # 查找首个 a 标签
spanText = driver.find_element(By.TAG_NAME, "span")    # 超找首个 span 标签

print(inputText)
print(link)
print(spanText)

5.7 按XPath查找

find_element(By.XPATH, "表达式")

5.8 基于绝对路径或相对路径

1. / 绝对路径

2. // 相对路径

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
inputText = driver.find_element(By.XPATH, "/html/body/div/div/div/div/div/form/span/input")   # 查找首个 input 标签
link = driver.find_element(By.XPATH, "a")       # 查找首个 a 标签
spanText = driver.find_element(By.XPATH, "span")    # 超找首个 span 标签

print(inputText)
print(link)
print(spanText)

5.9 基于索引或属性定位

[]使用中括号填入索引

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
inputText = driver.find_element(By.XPATH, "//span/input[1]")   # 选择第一个匹配表达式的元素
inputLastText = driver.find_element(By.XPATH, "//span/input[last()]")   # 选择最后一个与表达式匹配的元素
inputText_1 = driver.find_element(By.XPATH, "//input[@id='kw']")        # 按ID查询元素
inputText_2 = driver.find_element(By.XPATH, "//input[@name='wd']")      # 按name查询元素
inputText_3 = driver.find_element(By.XPATH, "//input[@class='s_ipt']")  # 按class查询元素

print(inputText)
print(inputLastText)
print(inputText_1)
print(inputText_2)
print(inputText_2)

5.10 基于轴定位

1. xpath支持从下层向上层查找元素,还可以向前或向后查找元素。

2. following 查找之后的元素

3. preceding 查找之前的元素

4. parent 查找父级元素

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
inputText_1 = driver.find_element(By.XPATH, "//span[@class='soutu-btn']/following::input[1]")   # 选择之后的首个input
inputText_2 = driver.find_element(By.XPATH, "//a[@id='quickdelete']/preceding::input[1]")   # 选择之前的首个input
inputText_3 = driver.find_element(By.XPATH, "//input[@id='su']/parent::span/parent::form//input[@id='kw']") # 选择父级元素的父级元素的input

print(inputText_1)
print(inputText_2)
print(inputText_2)

5.11 基于函数或表达式定位

1. text()

2. contains(属性, 文本内容) 包含

3. starts-width(属性, 文本) 以..开始的元素

4. and 两个条件同时符合

5. or 只符合一个条件

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

driver.find_element(By.XPATH, "//a[text()='hao123']")   # 查找文本为hao123的
driver.find_element(By.XPATH, "//a[contains(@href, 'www.hao123.com')]")     # 查找包含文本www.hao123.com的a元素
driver.find_element(By.XPATH, "//a[contains(text(), 'ao12')]")  # 查找文本包含ao12的a元素
driver.find_element(By.XPATH, "//a[starts-width(@href, 'https://www.hao')]")    # 查找href属性以https://www.hao开头的a元素
driver.find_element(By.XPATH, "//a[@name='errorname' or text()='hao123']")  # 查找符合其中一个条件的a元素
driver.find_element(By.XPATH, "//a[contains(@href, 'hao123') and text()='hao123']")
# 查找属性包含hao123并且文本等于hao123的元素

5.12 按css选择器查找

find_element(By.CSS_SELECTOR, 选择器逻辑)

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

inputText_1 = driver.find_element(By.CSS_SELECTOR, "html > body >  div > div > div > div > div > form > span > input")
inputText_2 = driver.find_element(By.CSS_SELECTOR, "span > input")

print(inputText_1)
print(inputText_2)

5.13 关键属性定位

id、class、name

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

inputText_1 = driver.find_element(By.CSS_SELECTOR, "#kw")   # 匹配id属性
inputText_2 = driver.find_element(By.CSS_SELECTOR, ".s_ipt")    # 匹配class属性
inputText_3 = driver.find_element(By.CSS_SELECTOR, "[name=wd]")  # 匹配name属性

print(inputText_1)
print(inputText_2)
print(inputText_3)

5.14 属性进行模糊定位

1. ^ 开头

2. $ 结尾

3. *包含

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

inputText_1 = driver.find_element(By.CSS_SELECTOR, "[href^='https://www.hao']")   # 查找href属性值以https://www.hao开头元素
inputText_2 = driver.find_element(By.CSS_SELECTOR, "[href$='baidu.com']")    # 查找href属性值以123.com结尾元素
inputText_3 = driver.find_element(By.CSS_SELECTOR, "[href*=hao123]")  # 查找href属性值包含123的元素

print(inputText_1)
print(inputText_2)
print(inputText_3)

5.16 组合式定位

将以上定位组合到一起

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

# 查找任意span下class名称为s_ipt,Name属性为wd的input元素
inputText = driver.find_element(By.CSS_SELECTOR, "span > input[class='s_ipt'][name='wd']")

print(inputText)

5.17 查找元素集合

同时去查找多个匹配元素。

find_elements(By.查找条件, "条件值")

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

links = driver.find_elements(By.CLASS_NAME, "mnav")
print("找到的链接数量:", len(links))
for link in links:
    print(link.text)

5.18 嵌套查找

通过查找已有元素之下符合条件的子元素。

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

searchForm = driver.find_element(By.ID, "form")# 查找ID为form的元素
searchTextBox = driver.find_element(By.ID, "kw") # 查找form中ID为kw的元素
print(searchTextBox)

六、页面元素基本操作

6.1 单击元素

webElement.click() 单击操作

测试代码 

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

driver.find_element(By.XPATH, "//span[text()='设置']").click()
driver.find_element(By.LINK_TEXT, "搜索设置").click()
time.sleep(3)

driver.find_element(By.ID, "s1_2").click()
driver.find_element(By.XPATH, "//li[text()='高级搜索']").click()
driver.find_element(By.XPATH, "//span[@title='关闭']").click()

driver.quit()

6.2 向元素输入内容或上传附件

send_keys("输入内容")

上传附件可以直接把文件路径填写进入就可以。

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get('http://image.baidu.com/search/index?tn=baiduimage&word=selenium')
driver.find_element(By.ID, "stfile").send_keys("图片地址")
driver.quit()

6.3 清空元素内容

clear() 清空元素内容

例如搜索框,输入关键字后,然后清空文本框内容,在输入关键字,清空就可以使用claer()

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
searchTextBox = driver.find_element(By.ID, "kw")
searchTextBox.send_keys("小那同学")
searchTextBox.clear()   # 清空文本
searchTextBox.send_keys("小李同学")
time.sleep(3)
driver.quit()

6.4 提交表单元素

submit() 提交

搜索功能不需要点击搜索按钮,直接通过submit() 函数就可以提交。

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
searchTextBox = driver.find_element(By.ID, "kw")
searchTextBox.send_keys("python")
driver.find_element(By.ID, "form").submit()     # 提交表单
time.sleep(3)
driver.quit()

6.5 下拉框元素选项操作

对于下拉框元素,需要将WebElement对象转换成Select对象才可以进行操作。

1. from selenium.webdriver.support.select import Select 引入Select模块

2. select_by_visible_text("选项文本") 根据文本选择

3. select_by_value("选项值") 根据选项值选择

4. select_by_index(选项索引) 根据选项索引选择,从0开始

稍后补充

七、页面元素的内容

7.1 获取元素的基本属性

7.1.1 获取元素的文本值

text 获取文本值

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
baiduMapLink = driver.find_element(By.PARTIAL_LINK_TEXT, "地")
print(baiduMapLink.text)
driver.quit()
7.1.2 获取元素的标签类型

tag_name 标签类型

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
baiduMapLink = driver.find_element(By.PARTIAL_LINK_TEXT, "地")
print(baiduMapLink.tag_name)
driver.quit()
7.1.3 获取元素的选中状态

is_selected() 是否选中状态, True 选中、False 未选中

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element(By.XPATH, "//span[text()='设置']").click()
driver.find_element(By.LINK_TEXT, "搜索设置").click()
time.sleep(3)
print(driver.find_element(By.ID, "s1_1").is_selected())
print(driver.find_element(By.ID, "s1_2").is_selected())
driver.quit()
7.1.4 判断元素可编辑状态

is_enabled() 可编辑状态, True 可编辑, False 不可编辑

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

baiduSearchTextbox = driver.find_element(By.ID, "kw")
print(baiduSearchTextbox.is_enabled())
driver.quit()
7.1.5 判断元素是否已显示

is_displayed() 是否已显示, True 已显示, False 未显示

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

driver.find_element(By.XPATH, "//span[text()='设置']").click()
time.sleep(3)
advSearchOption = driver.find_element(By.LINK_TEXT, "高级搜索")
print(advSearchOption.is_displayed())

driver.find_element(By.ID, "kw").click()
time.sleep(3)
print(advSearchOption.is_displayed())
driver.quit()

7.2 获取HTML、DOM、CSS属性

7.2.1 获取元素HTML属性

get_attribute("属性名称") HTML属性

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

baiduSearchTextbox = driver.find_element(By.ID, "kw")
baiduSearchTextbox.send_keys("selenium")

print("获取已设定的属性")
print("id = ", baiduSearchTextbox.get_attribute("id"))
print("name = ", baiduSearchTextbox.get_attribute("name"))
print("class = ", baiduSearchTextbox.get_attribute("class"))
print("value = ", baiduSearchTextbox.get_attribute("value"))
print("maxlength = ", baiduSearchTextbox.get_attribute("maxlength"))
print("autocomplete = ", baiduSearchTextbox.get_attribute("autocomplete"))

print("获取未设定的属性,默认值")
print("style = ", baiduSearchTextbox.get_attribute("type"))
print("height = ", baiduSearchTextbox.get_attribute("height"))
print("draggable = ", baiduSearchTextbox.get_attribute("draggable"))

print("获取不存在属性")
print("不存在 = ", baiduSearchTextbox.get_attribute("abcdefghijklmn"))
driver.quit()
7.2.2 获取元素DOM属性

get_propperty("属性名称") 获取DOM属性,区分大小写。

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

baiduSearchTextbox = driver.find_element(By.ID, "kw")

print("获取DOM属性")
print("节点HTML源码 = ", baiduSearchTextbox.get_property("outerHTML"))
print("节点名称 = ", baiduSearchTextbox.get_property("nodeName"))
print("节点类型 = ", baiduSearchTextbox.get_property("nodeType"))
print("节点实际高度 = ", baiduSearchTextbox.get_property("clientHeight"))
print("节点实际宽度 = ", baiduSearchTextbox.get_property("clientWidth"))
print("该节点的父节点的节点名称 = ", baiduSearchTextbox.get_property("parentNode").get_property("nodeName"))
print("紧邻该节点的下一个节点源码", baiduSearchTextbox.get_property("nextSibling").get_property("outerHTML"))

print("获取不存在的DOM属性")
print("不存在的 = ", baiduSearchTextbox.get_property("abcdefg"))

driver.quit()
7.2.3 获取元素CSS属性

value_of_css_property("css属性名称") 获取元素CSS属性

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

baiduSearchTextbox = driver.find_element(By.ID, "kw")

print("宽度样式值 = ", baiduSearchTextbox.value_of_css_property("width"))
print("高度样式值 = ", baiduSearchTextbox.value_of_css_property("height"))
print("外边距值 = ", baiduSearchTextbox.value_of_css_property("margin"))
print("文字颜色 = ", baiduSearchTextbox.value_of_css_property("color"))
print("背景颜色 = ", baiduSearchTextbox.value_of_css_property("background"))
driver.quit()
7.2.4 获取元素位置与大小

1. location 获取位置对象

2. size 获取大小对象

3. rect 获取位置及大小对象

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

baiduSearchTextbox = driver.find_element(By.ID, "kw")

print("获取位置对象 = ", baiduSearchTextbox.location)
print("获取位置坐标 x 值 = ", baiduSearchTextbox.location["x"])
print("获取位置坐标 y 值 = ", baiduSearchTextbox.location["y"])

print("获取大小对象 = ", baiduSearchTextbox.size)
print("获取宽度值 = ", baiduSearchTextbox.size["width"])
print("获取高度值 = ", baiduSearchTextbox.size["height"])

print("获取位置及大小对象 = ", baiduSearchTextbox.rect)
print("获取位置坐标 x 值 = ", baiduSearchTextbox.rect["x"])
print("获取位置坐标 y 值", baiduSearchTextbox.rect["y"])
print("获取宽度值 = ", baiduSearchTextbox.rect["width"])
print("获取高度值 = ", baiduSearchTextbox.rect["height"])

driver.quit()
7.2.5 获取下拉框元素的选项

1. first_selected_option 首个已选中项

2. all_selected_options 获取全部已选中项

3. options 下拉框提供所有选项

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/f/search/adv")

selectWebElement = driver.find_element(By.NAME, "rn")

print("首个已选中项 = ", Select(selectWebElement).first_selected_option.text)
selectedOptions = ""
for selectedOption in Select(selectWebElement).all_selected_options:
    selectedOptions += selectedOption.text + "; "
print("全部选中项 = ", selectedOptions)

supportedOptions = ""
for supportedOption in Select(selectWebElement).options:
    supportedOptions += supportedOption.text + "; "
print("所有选项", supportedOptions)

八、处理浏览器弹出框

浏览器弹出框分为3种,Alert、Confirmation、Prompt。

在WebDriver中视为Alert对象。

driver.switch_to.alert 获取Alert对象

8.1 弹出框的确认和取消

1. Alert.accept() 单击确认按钮

2. Alert.dismiss() 单击取消按钮

测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>弹出框</title>
</head>
<body>
    <input type="button" onclick="alert('alert');" value="Alert">
    <input type="button" onclick="confirm('confirm');" value="confirm"/>
    <input type="button" onclick="prompt('prompt','');" value="prompt"/>
</body>
</html>
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("网页位置")

alertButton = driver.find_element(By.XPATH, "//input[@value='alert']")
alertButton.click()
time.sleep(3)
driver.switch_to.alert.accept()

confirm = driver.find_element(By.XPATH, "//input[@value='confirm']")
confirm.click()
time.sleep(3)
driver.switch_to.alert.dismiss()
driver.quit()

8.2 获取弹出框文本

Alert.text

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("")

alert = driver.find_element(By.XPATH, "//input[@value='alert']")
alert.click()
print("弹出框文本 = ", driver.switch_to.alert.text)
driver.switch_to.alert.accept()

confirm = driver.find_element(By.XPATH, "//input[@value='confirm']")
confirm.click()
print("弹出框文本 = ", driver.switch_to.alert.text)
driver.switch_to.alert.accept()

prompt = driver.find_element(By.XPATH, "//input[@value='prompt']")
prompt.click()
print("弹出框文本 = ", driver.switch_to.alert.text)
driver.switch_to.alert.accept()
driver.quit()

8.3 向弹出框输入内容

Alert.send_keys("输入内容")

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("")

prompt = driver.find_element(By.XPATH, "//input[@value='prompt']")
prompt.click()
time.sleep(3)
driver.switch_to.alert.send_keys("小那同学")
driver.quit()

九、多网页切换

操作网页会打开新的窗口,有可能遇到将一个网页内容嵌入到另一个网页,就需要打开多个页面。

9.1 多浏览器窗口切换

多浏览器柴沟切换依赖于窗口句柄,一个WebDriver实例只会打开一个窗口句柄,但单击链接,会在新窗口显示网页,这时就拥有两个句柄。

1. current_window_handle 获得当前正在操作的窗口句柄

2. window_handles 获得WebDriver下全部句柄

3. switch_to.window(窗口句柄) 切换指定窗口

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

print("未操作前全部窗口句柄 = ", driver.window_handles)
driver.find_element(By.LINK_TEXT, "登录").click()
time.sleep(3)
driver.find_element(By.LINK_TEXT, "立即注册").click()
time.sleep(3)
print("单击立即注册后全部句柄 = ", driver.window_handles)
print("当前窗口句柄 = ", driver.current_window_handle)

driver.switch_to.window(driver.window_handles[1])
driver.find_element(By.NAME, "userName").send_keys("小那同学")
time.sleep(3)
print("切换到注册页后的当前窗口句柄 = ", driver.current_window_handle)

driver.switch_to.window(driver.window_handles[0])
time.sleep(3)
driver.quit()

9.2 Iframe 切换

1. switch_to.frame(IFrame元素) 切换当前页面下一级指定IFrame中

2. switch_to.parent_frame() 切换当前IFrame的上一级页面中

测试代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("")
driver.find_element(By.ID, "siteUrl").send_keys("https://www.baidu.com")
driver.find_element(By.TAG_NAME, "button").click()
time.sleep(3)

driver.switch_to.frame(driver.find_element(By.ID, "innerFrame"))
driver.find_element(By.ID, "kw").send_keys("selenium")
time.sleep(3)

driver.switch_to.parent_frame()
driver.find_element(By.ID, "siteUrl").clear()
driver.find_element(By.ID, "siteUrl").send_keys("https://www.baidu.com")
driver.find_element(By.TAG_NAME, "button").click()
driver.quit()

十、结束WebDriver

quit() 关闭所有窗口并结束WebDriver

 


原文地址:https://blog.csdn.net/bjjgff/article/details/144309310

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!