【Selenium(五)】

一、鼠标事件

python 复制代码
from selenium import webdriver
# 导入ActionChains类进行鼠标悬停操作
from selenium.webdriver.common.action_chains import  ActionChains
import time

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

time.sleep(2)

# 定位到设置
st_button=driver.find_element_by_id("s-usersetting-top")

# 设置鼠标悬停
ActionChains(driver).move_to_element(st_button).perform()

二、键盘事件

python 复制代码
# -*- coding: utf-8 -*-

from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

time.sleep(2)

# 定位到设置,输入内容
search_box=driver.find_element_by_id("kw")
search_box.send_keys("seleniumABC")

time.sleep(3)
# 删除多余的m,调用删除键
# Keys.BACK_SPACE只能删除一个字母,要删除多个字母,需要乘几
search_box.send_keys(3*Keys.BACK_SPACE)

time.sleep(3)
# 调用回车建
search_box.send_keys(Keys.ENTER)

三、获取断言信息

(1)通过文本信息判断

python 复制代码
# -*- coding: utf-8 -*-

from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("python")
search_box.send_keys(Keys.ENTER)

# 搜索出来第一页的所有内容标题
# find_element_by_xpath定位元素的方法现实的是elements,多个元素在一个列表中
titles = driver.find_elements_by_xpath('//div[@id="content_left"]//h3')
print(titles)

# 由于获取结果是列表,要获取内容,必须遍历列表,一个一个获取
for t in titles:
    #获取文本信息
    print(t.text)

(2)通过title信息做断言

python 复制代码
# -*- coding: utf-8 -*-

from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("python")
search_box.send_keys(Keys.ENTER)

time.sleep(3)
# 获取网页标题
print(driver.title)

(3)根据URL判断

python 复制代码
# -*- coding: utf-8 -*-

from selenium import webdriver
# 导入Keys类调用键盘
from selenium.webdriver.common.keys import  Keys
import time

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("python")
search_box.send_keys(Keys.ENTER)

time.sleep(3)
# 获取当前网页URL
print(driver.current_url)

四、设置元素等待

python 复制代码
# -*- coding: utf-8 -*-

from selenium import webdriver
# 显示等待时,元素定位方式需要使用By加载
from selenium.webdriver.common.by import By

# 设置显示等待
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')

# WebDriverWait(浏览器driver,最大超时时间,轮询时间)
# EC.presence_of_element_located()里面接受的是元素定位方式和具体的表达式,要使用元组的形式传入
# 定位搜索框
search_obj=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,'kw')))
# 输入内容
search_obj.send_keys("hello")
# 设置提交
# search_obj.submit()
search_obj.send_keys(Keys.ENTER)

五、多窗口切换

浏览器打开的窗口有一个叫句柄的概念,句柄类似于每一个标签页的id一样,是唯一的。

python 复制代码
# -*- coding: utf-8 -*-

from selenium import webdriver

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
from selenium.webdriver.common.keys import Keys

driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://www.baidu.com/")

# 定位到设置,输入内容并搜索
search_box=driver.find_element_by_id('kw')
search_box.send_keys("李克强")
search_box.send_keys(Keys.ENTER)

# 获取标签页句柄
windowhandle=driver.current_window_handle
# print(windowhandle)

# 点击 李克强百度百科
driver.find_element_by_xpath('//div[@id="1"]/div/h3/a').click()

# 获取当前浏览器的所有窗口的句柄,获取回来的拆改纽扣句柄放在一个列表里
headles=driver.window_handles
print(headles)

# 根据句柄进行切换
"""方法一
for head in headles:
    # 如果窗口句柄不等于打开的第一个窗口的句柄,则就是第二个
    if head!=windowhandle:
        driver.switch_to.window(head)
"""

"""方法二"""
# 根据下标进行句柄切换,获取回来的时候,窗口的句柄是一个列表,-1代表是最新打开的窗口句柄,0代表第一个
driver.switch_to.window(headles[-1])

# 点击 播报 按钮
driver.find_element_by_xpath('//div[@class="lemmaTitleBox_EbvJX"]/div/span/span/span').click()

六、表单切换

在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

  • switch_to.frame() 默认可以直接取表单的id 或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位
  • 除此之外,在进入多级表单的情况下,还可以通过**switch_to.default_content()**跳回最外层的页面。
python 复制代码
# -*- coding: utf-8 -*-
import time

from selenium import webdriver

# 打开一个浏览器
# 法一、添加环境变量重启电脑
# 法二、填写浏览器驱动的绝对路径
from selenium.webdriver.common.keys import Keys

driver = webdriver.Edge(r"D:\tools\driver\msedgedriver.exe")

# 设置浏览器最大化显示
driver.maximize_window()

# 隐式等待
driver.implicitly_wait(10)

# 打开网页
driver.get("https://mail.163.com/")

# iframe表单切换
"""
switch_to.frame()里面可以填写iframe表单的id和name,但是id和name要唯一
还可以通过其他的定位方式定位到该iframe标签,然后将定位到iframe标签对象传入到switch
"""
# 通过XPath的方式定位iframe标签
iframe_element=driver.find_element_by_xpath('//div[@id="loginDiv"]/iframe')
driver.switch_to.frame(iframe_element)

# 定位邮箱输入框
driver.find_element_by_css_selector('input[name="email"]').send_keys("xiangzc")

# 定位密码框
driver.find_element_by_css_selector('input[name="password"]').send_keys("xiangzc")

# 点击 登录 按钮
driver.find_element_by_id('dologin').click()

time.sleep(2)
# 点击VIP,按照此方式进入失败,因为进行完上述操作后,是在子页面中,而VIP还在外层页面,所以需要切换出来
driver.switch_to.default_content()
driver.find_element_by_css_selector('a[href="https://vipmail.163.com/?from=fmail"]').click()
相关推荐
Lossya12 小时前
【自动化测试】常见的自动化遍历工具以及如何选择合适的自动化遍历工具
自动化测试·功能测试·测试工具·自动化·测试
Lossya16 小时前
【自动化测试】UI自动化的分类、如何选择合适的自动化测试工具以及其中appium的设计理念、引擎和引擎如何工作
自动化测试·测试工具·ui·appium·自动化
waterHBO1 天前
python 爬虫 selenium 笔记
爬虫·python·selenium
chenjingming6661 天前
windows使用tcpdump.exe工具进行抓包教程
网络·测试工具·tcpdump
小码哥说测试2 天前
软件测试技术之 GPU 单元测试是什么!
自动化测试·功能测试·测试工具·jmeter·单元测试·集成测试·postman
全能全知者2 天前
不废话简单易懂的Selenium 页面操作与切换
python·selenium·测试工具·网络爬虫
测试19983 天前
使用Selenium进行网页自动化
自动化测试·软件测试·python·selenium·测试工具·自动化·测试用例
做一道光3 天前
1、QAC静态测试常用操作
软件测试·测试工具·静态测试
假女吖☌3 天前
postman接口关联
测试工具·postman
测试杂货铺3 天前
selenium元素定位:元素点击交互异常解决方法
自动化测试·软件测试·python·selenium·测试工具·职场和发展·单元测试