Selenium经典API操作

三种等待方式

1.强制等待——sleep(等待时间)
time库中的sleep()函数
不管怎么样,让等几秒就等几秒
真正测试的时候不需要死等,只要页面刷新出元素了就可以往下进行。但是不等直接进行页面定位的话有可能页面没加载完成就去定位了,因为电脑肯定比人要快,所以有可能会页面还没加载完,定位的脚本已经开始执行了,结果发现定位不到元素。这时就要加隐式等待,等页面加载完再去定位。
2.隐式等待——implicitly_wait(最大加载时长)
页面元素一个都不能少,全都加载完再结束。也可以设置一个最大加载时长,如果时间到了还没加载完会报错。
一个driver对象只需要设置一次隐式等待。
3.显式等待
等一个特定的条件,只要要等的元素加载出来了就往下进行。并不是建立在整个页面都加载完的基础上,只要我等的元素加载完就可以。
显示等待会定时查看条件是否满足

判断窗口title

# 设置显示等待需要导包
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait# 直到出现某个条件
#判断窗口title
# 只要title出来就继续往下运行,不会一直等到15秒
WebDriverWait(driver, 15).until(EC.title_is("乐搏商城 - 演示站点"))
print("窗口的title:", driver.title)

定位到页面元素

# 定位到元素 找到这个元素,然后这个元素加载出来就往下进行
WebDriverWait(driver, 10).until(EC.visibility_of(driver.find_element("id", "search-input")))

用显示等待定位弹窗
定位这种一闪而过的弹窗,可以在F12中找到Source(源代码),在弹窗出现的瞬间点击暂停,暂停后点击F12左上角的箭头,然后再去定位就可以了

# 点击登录,跳转到登录页面,输入用户名和密码,输入成功后弹框提示登陆成功
# 点击登录
driver.find_element("link text", "登录").click()
# 输入用户名
driver.find_element("name", "accounts").send_keys("lebo19_001")
# 输入密码
driver.find_element("name", "pwd").send_keys("lebo19.001")
# 点击登录
driver.find_element("xpath", "//button[text()='登录']").click()
# 用显示等待定位弹窗
WebDriverWait(driver, 10).until(EC.visibility_of(driver.find_element("xpath", "//*[@class='prompt-msg']")))
显示等待的常用方法 方法名
判断标题是否和预期的一致 title_is
判断标题中是否包含预期的字符串 title_contains
判断指定元素是否加载出来 presence_of_element_located
判断所有元素是否加载完成 presence_of_all_elements_located
判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0,传入参数是元组类型的locator visibility_of_element_located
判断元素是否可见,传入参数是定位后的元素WebElement visibility_of
判断某个元素是否不可见,或是否不存在于DOM树 nvisibility_of_element_located
判断元素的 text 是否包含预期字符串 text_to_be_present_in_element
判断元素的 value 是否包含预期字符串 text_to_be_present_in_element_value
判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement frame_to_be_available_and_switch_to_it
判断是否有alert出现 alert_is_present
判断元素是否可点击 element_to_be_clickable
判断元素是否被选中,一般用在下拉列表,传入WebElement对象 element_to_be_selected
判断元素是否被选中 element_located_to_be_selected
判断元素的选中状态是否和预期一致,传入参数:定位后的元素,相等返回True,否则返回False element_selection_state_to_be
判断元素的选中状态是否和预期一致,传入参数:元素的定位,相等返回True,否则返回False element_located_selection_state_to_be

模拟键盘操作

# 模拟键盘操作 需要导的包
from selenium.webdriver.common.keys import Keys
# 模拟键盘操作
item = driver.find_element("name", "wd")
item.send_keys("手机充电器")
sleep(1)
# 模拟删除键 把充电器删掉
item.send_keys(Keys.BACKSPACE)
sleep(1)
item.send_keys(Keys.BACKSPACE)
sleep(1)
item.send_keys(Keys.BACKSPACE)
sleep(1)
# 再撤回刚才删掉的内容 键盘快捷键是Ctrl+z
item.send_keys(Keys.CONTROL, "z")
sleep(3)

键盘上的键几乎全都封装了

模拟键盘操作↓

send_keys(Keys.BACK_SPACE):删除键(BackSpace)

send_keys(Keys.SPACE):空格键(Space)

send_keys(Keys.TAB):制表键(TAB)

send_keys(Keys.ESCAPE):回退键(ESCAPE)

send_keys(Keys.ENTER):回车键(ENTER)

send_keys(Keys.CONTRL,'a'):全选(Ctrl+A)

send_keys(Keys.CONTRL,'c'):复制(Ctrl+C)

send_keys(Keys.CONTRL,'x'):剪切(Ctrl+X)

send_keys(Keys.CONTRL,'v'):粘贴(Ctrl+V)

send_keys(Keys.F1):键盘F1

send_keys(Keys.F12):键盘F12

模拟鼠标操作

点击鼠标右键

# 导包
from selenium.webdriver.common.action_chains import ActionChainsitem = driver.find_element("link text", "登录")
# 移动鼠标到登录按钮的位置(移动的是虚拟的鼠标,眼睛是看不到的)
print("移动到登录按钮")
ActionChains(driver).move_to_element(item)
# 进入登录页面
item.click()
# 点击鼠标右键,并执行这个动作
print("点击鼠标右键")
ActionChains(driver).context_click().perform()

拖拽操作
拖拽操作嘛,开始位置和结束位置需要被指定,这个常用于滑块类验证码的操作之类。
ActionChains(driver).drag_and_drop(鼠标按下开始,鼠标抬起结束)

# 拖拽操作
ActionChains(driver).drag_and_drop(driver.find_element("name", "wd"), driver.find_element("name", "accounts"))
print("拖拽操作从搜索框开始,到输入登录用户名的输入框结束")

鼠标悬停
当鼠标在网页的部分图标、文字或者图片上停留的时候,会有部分内容弹出,当从这个图标、文字或者图片上移开鼠标后,弹出的内容自动缩回

# 悬停
#找到要悬停的位置
item = driver.find_element("xpath", "//span[text()='食品饮料']")
sleep(1)
# 把鼠标移动到要悬停的位置,并执行
ActionChains(driver).move_to_element(item).perform()

控制滚动条
通过JavaScript来控制

# 控制滚动条
# 定义一个js脚本(字符串)
# 先向下滚动(设一个很大的数字自然就会滚动到底部)
js = "window.scrollTo(0,10000)"
# 用document.body.scrollHeight这个也可以滚动到底部
# js = "window.scrollTo(0,document.body.scrollHeight)"
driver.execute_script(js)
sleep(2)
# 再滚回去
js = "window.scrollTo(0,0)"
driver.execute_script(js)
sleep(2)
# 再向下滚动一点点
js = "window.scrollTo(0,100)"
driver.execute_script(js)

Selenium经典API操作相关推荐

  1. HDFS的shell和API操作

    1. HDFS的shell操作 hadoop version //查看版本 hadoop fs -appendToFile src(Linux中的文件) dest(hdfs目录下的文件) //追加 h ...

  2. Selenium Web 自动化 - Selenium常用API

    Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作   1.1 用webdriver打开一个浏览器   1.2 最大化浏览器&关闭浏 ...

  3. Selenium 中文API

    Selenium 中文API 转自:http://blog.csdn.net/lh9529/article/details/3946567 概念 Selenium 通过命令进行驱动.Selenium  ...

  4. WEB自动化(Python+selenium)的API

    在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                         ...

  5. Python+selenium WebDriver API

    目录 2.1 操作元素基本方法 2.2 常用8种元素定位(Firebug和firepath) 2.3 xpath定位 2.4 CSS定位 2.5 SeleniumBuilder辅助定位元素 2.6 操 ...

  6. 实验二 HDFS的Shell命令操作,和HDFS的API操作

    文章目录 实验目的 一. 实验原理 二.实验准备 实验内容 步骤 项目1 HDFS常见命令练习 列出HDFS当前用户家目录下的文件及文件夹: 列出HDFS文件下名为directory的文件夹中的文件: ...

  7. 2021年大数据Hadoop(十二):HDFS的API操作

    2021大数据领域优质创作博客,带你从入门到精通,该博客每天更新,逐渐完善大数据各个知识体系的文章,帮助大家更高效学习. 有对大数据感兴趣的可以关注微信公众号:三帮大数据 目录 HDFS的API操作 ...

  8. 2021年大数据ZooKeeper(五):ZooKeeper Java API操作

    目录 ZooKeeper Java API操作 引入maven坐标 节点的操作 ZooKeeper Java API操作 这里操作Zookeeper的JavaAPI使用的是一套zookeeper客户端 ...

  9. c 获取mysql列数据_转 用C API 操作MySQL数据库

    用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,"C API函数描述". 函数 ...

最新文章

  1. 机器学习与算法面试太难?
  2. linux shell sed 添加空行
  3. C++纯虚函数 virtual =0
  4. 统计含中英文混编的NSString 字符串长度
  5. 项目经理的十二条规则
  6. MaxCompute跨境访问加速解决方案
  7. python map函数的作用_Python的map函数
  8. php 向ldap请求文件,绑定 LDAP 目录 - PHP 7 中文文档
  9. proc文件系统探索 之 以数字命名的目录
  10. 【待续】C#.Net 关键词清理 Fields Property Attribute Const三者之间的区别与联系
  11. 后端开发都应该掌握的Redis基础
  12. BZOJ 1013: [JSOI2008]球形空间产生器sphere
  13. 数据结构c语言版算法设计题,数据结构题集(C语言版)算法设计答案
  14. HTTP下载文件到本地
  15. 2022华为春招面试经历
  16. 2021年中国人工智能市场发展现状
  17. 山贼集团 (group)
  18. SLAM之camera(Intel RealSense D435)调试第一弹:Win10平台下getting started
  19. laya 怎么生成签名_手写签名在线生成器一笔签-手写签名在线生成器微信
  20. 程序员必备技能之约会倍增术

热门文章

  1. AI绘画 Midjourney
  2. erp系统大概多少钱
  3. 88 java反射_4 _注解
  4. 微信小程序云开发实例 源码 部署详细流程[自带管理后台]
  5. java语言有哪些优点?
  6. 基于QT平台webapi科大讯飞语音机器人
  7. 5个非常实用的小程序UI设计模板分享
  8. 从产品经理能力评估维度,掌握产品经理技能
  9. python电影推荐系统 github_GitHub - JaniceWuo/MovieRecommend: 一个电影推荐系统
  10. 闪存趋势可能导致用户回归硬盘