快速学习selenium基础操作

news2025/1/19 23:25:32

 全篇大概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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2255902.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用uniapp开发小程序场景:在百度地图上调用接口返回的设备相关信息并展示

首先在百度地图开发者平台注册微信小程序开发密钥下载百度地图SDK-bmap-wx.min.js,下载地址在项目入口index.html页面进行引入页面中进行调用&#xff0c;代码示例如下<map id"map" longitude"108.95" latitude"34.34" scale"3" :m…

SPI驱动模型框架及spidev.c分析---学习记录

目录 SPI设备如何使用 SPI驱动模型框架 SPI 控制器/SPI Master分析 SPI 设备端/SPI Slave分析 SPI 控制器/SPI Master与SPI 设备端/SPI Slave驱动模型 Linux内核自带的SPI 设备端/SPI Slave代码spidev.c 小结 SPI设备如何使用 一般我们使用spi设备驱动是类似文件操作&#xff0…

WordPress XStore Elementor 前端与编辑器内容不同步的问题

最近在新站更换成XStore的Elementor模板后&#xff0c;在编辑器修改完的内容前端网页部分没有同步&#xff0c;一开始清除了缓存没有解决。后面尝试重新安装也还是存在这个问题。 后续又在服务器上删除了Elementor插件缓存文件&#xff0c;问题依然存在。 最后通过在Elemento…

第四届全国过程模拟与仿真大会召开,积鼎科技相伴大会6年成长

第四届全国过程模拟与仿真学术会议于2024年11月29日-12月2日在广州圆满召开。积鼎科技&#xff0c;作为自主流体仿真软件研发的领航企业&#xff0c;与大会相伴四年&#xff0c;自首届以来一直积极参与其中&#xff0c;见证了大会从初创到逐渐壮大的全过程。每一次参会&#xf…

SAP导出表结构并保存到Excel 源码程序

SAP导出表结构并保存到Excel,方便写代码时复制粘贴 经常做接口,需要copy表结构,找到了这样一个程程,特别有用。 01. 先看结果

Hadoop生态圈框架部署 伪集群版(四)- Zookeeper单机部署

文章目录 前言一、Zookeeper单机部署&#xff08;手动部署&#xff09;1. 下载Zookeeper安装包到Linux2. 解压zookeeper安装包3. 配置zookeeper配置文件4. 配置Zookeeper系统环境变量5. 启动Zookeeper6. 停止Zookeeper在这里插入图片描述 注意 前言 本文将详细介绍Zookeeper的…

文件IO——01

1. 认识文件 1&#xff09;文件概念 “文件”是一个广义的概念&#xff0c;可以代表很多东西 操作系统里&#xff0c;会把很多的硬件设备和软件资源抽象成“文件”&#xff0c;统一管理 但是大部分情况下的文件&#xff0c;都是指硬盘的文件&#xff08;文件相当于是对“硬…

Spring完整知识点二

Spring注解开发 Spring是轻代码而重配置的框架&#xff0c;配置比较繁重&#xff0c;影响开发效率&#xff0c;所以注解开发是一种趋势&#xff0c;它能够代替xml配置文件&#xff0c;可以简化配置&#xff0c;提高开发效率Spring注解根据出现时间分类 Spring原始注解&#xf…

阻塞队列详解

阻塞队列介绍 队列 是限定在一端进行插入&#xff0c;另一端进行删除的特殊线性表。先进先出(FIFO)线性表。允许出队的一端称为队头&#xff0c;允许入队的一端称为队尾。 数据结构演示网站&#xff1a; https://www.cs.usfca.edu/~galles/visualization/Algorithms.html Q…

使用Java将PDF文件解析成Excel文件

安装pom依赖 <!-- 解析pdf--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version> <!-- 请检查并使用最新版本 --></dependency>测试读取pdf文件…

web前端设计1

熟悉流行框架、熟练掌握CSS的写法&#xff0c;以及JAVASCRIPT库的应用&#xff0c;最主要的是能按要求改出相应的界面&#xff0c;因为我们基本没有自己手写代码的&#xff0c;所以得会拿别的界面改成想要的界面。 前端比较吃能力的就是CSS的写法&#xff0c;如何用已写好的框…

贪心算法part05

文章参考来源代码随想录 (programmercarl.com) 56. 合并区间 本题和前几题类似&#xff0c;都是判断上一个元素的右边界与当前元素的左边界大小关系 但是需要注意是&#xff1a;本题需要更新结果数组元素的右边界&#xff0c;因此比较的是数组最后一个元素右边界与当前元素左…

EasyAnimateV5 视频生成大模型原理详解与模型使用

在数字内容创作中&#xff0c;视频扮演的角色日益重要。然而&#xff0c;创作高质量视频通常耗时且昂贵。EasyAnimate 系列旨在利用人工智能技术简化这一过程。EasyAnimateV5 建立在其前代版本的基础之上&#xff0c;不仅在质量上有所提升&#xff0c;还在多模态数据处理和跨语…

【大语言模型】LangChain LCEL 表达式语言

【大语言模型】LangChain LCEL 表达式语言 一、简介二、LCEL的优势三、LCEL 的基本使用1、Runnable 对象 四、实战实例 一、简介 LangChain LCEL 的全称为 LangChain Expression Language 即可直译为 LangChain 表达式。 为了构造更复杂的 LLM 应用并且更为简便快捷的构造 LLM…

java中的递归

大家好&#xff0c;今天我们来学习一下java中的递归&#xff0c;相信大家应该也对递归有一点了解吧&#xff0c;如果没有也没有关系&#xff0c;我们现在就来了解一下。 五、递归 自身中包含了自己,遇到的问题直接并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问…

【pyspark学习从入门到精通23】机器学习库_6

目录 分割连续变量 标准化连续变量 分类 分割连续变量 我们经常处理高度非线性的连续特征&#xff0c;而且只用一个系数很难拟合到我们的模型中。 在这种情况下&#xff0c;可能很难只通过一个系数来解释这样一个特征与目标之间的关系。有时&#xff0c;将值划分到离散的桶中…

STM32 自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记&#xff0c;当前清理空间&#xff0c;本来想直接删除掉的&#xff0c;但是感觉有些舍不得&#xff0c;因此先搬移过来。 RAM vs ROM vs FLASH 2013-09-05记录&#xff0c;ROM和RAM指的都是半导体存储器&#xff0c;ROM是Read Only …

距离与AoA辅助的三维测距算法(适用于四个基站的情况的单点定位),MATLAB代码

本MATLAB 代码实现了一个基于LOS/NLOS混合环境的单点定位系统&#xff0c;主要用于估计目标物体的单点位 文章目录 代码运行结果源代码代码功能概述主要步骤分析初始化部分 绘图与输出 代码运行结果 定位结果如下&#xff1a; 命令行的坐标和误差输出&#xff1a; 部分代码…

2024年华中杯数学建模B题使用行车轨迹估计交通信号灯周期问题解题全过程文档及程序

2024年华中杯数学建模 B题 使用行车轨迹估计交通信号灯周期问题 原题再现 某电子地图服务商希望获取城市路网中所有交通信号灯的红绿周期&#xff0c;以便为司机提供更好的导航服务。由于许多信号灯未接入网络&#xff0c;无法直接从交通管理部门获取所有信号灯的数据&#x…

Cesium-地球材质-坡度

1. 创建viewer 创建viewer并添加地形 const viewer new Cesium.Viewer("cesiumContainer", {terrainProvider: await Cesium.CesiumTerrainProvider.fromIonAssetId(3956, {requestVertexNormals: true}) }); 2. 创建canvas色条 添加getColorRamp方法&#xff0…