python + selenium/appnium

Selenium 的自动化原理:

selenium 自动化流程:

  1. 自动化程序调用Selenium 客户端库函数(比如点击按钮元素)
  2. 客户端库会发送Selenium 命令 给浏览器的驱动程序
  3. 浏览器驱动程序接收到命令后 ,驱动浏览器去执行命令
  4. 浏览器执行命令
  5. 浏览器驱动程序获取命令执行的结果,返回给我们自动化程序
  6. 自动化程序对返回结果进行处理

google浏览器驱动:Chrome Driver

浏览器驱动更新,第三方库 webdriver-manager

语句:ChromeDriverManager.install()

from selenium import webdriver

from selenium.webdriver.common.by import By  升级到selenium4

wd = webdriver.Chrome()

输入框输入字符串使用 send_keys()

输入之前使用element.clear() # 清除输入框已有的字符串

点击元素clik

根据class/ id/tag

wd.find_elements(By.CLASS_NAME, 'animal')

wd.find_element(By.ID, 'kw')

wd.find_elements(By.TAG_NAME, 'div')

获取文本  element = wd.find_element(By.ID, 'animal')

                 print(element.text)

获取元素的属性值 element.get_attribute('class')

关闭浏览器窗口 wd.quit()

获取整个元素对应的HTML文本内容 element.get_attribute('outerHTML')

获取某个元素内部的HTML文本内容 element.get_attribute('innerHTML')

获取输入框里的文字 element.get_attribute('value')

获取文本显示所有内容 element.get_attribute('textContent')

CSS

css selector  css 选择器

1.tag名

elements = wd.find_elements(By.CSS_SELECTOR, 'div')  

2.id属性值   #id值

element = wd.find_element(By.CSS_SELECTOR, '#searchtext')

3.class属性值   .class值

elements = wd.find_elements(By.CSS_SELECTOR, '.animal')

4.直接子元素和后代元素  后代元素包含直接子元素

   直接子元素中间没有其他层

   直接子元素表示  元素a > 元素b

   后代元素表示      元素a    元素b

5.其他属性

   语法使用 [ ]

   例子:选择属性href值为 http://www.miitbeian.gov.cn 的元素

             element = wd.find_element(By.CSS_SELECTOR, '[href="http://www.miitbeian.gov.cn"]')

            a.不指定属性值  [href]

            b.加上标签名的限制 div[class='SKnet'] 

   例子:href属性包含了 miitbeian 字符串  [href*="miitbeian"]

              href属性以 http 开头 [href^="http"]

              href属性以 gov.cn 结尾 [href$="gov.cn"]

 6.css选择器可以 使用 逗号 ,称之为 组选择 

    例子:同时选择所有tag名为div的元素  id为BYHY的元素  div,#BYHY

7.选择的元素是父元素的第几个子节点

   nth-child

   例子:第2个子元素,并且是span类型  span: nth-child(2)

  选择的元素是父元素的倒数第几个子节点

  nth-last-child

  例子:选择第倒数第1个子元素,并且是p元素 p:nth-last-child(1)

  父元素的第几个某类型的子节点

   nth-of-type

元素紧跟关系的是加号
h3 后面所有的兄弟节点 span  h3 ~ span

frame切换

wd.switch_to.frame(frame_reference)  frame_reference是name属性值或者id

回原来的主html

wd.switch_to.default_content()

窗口的切换

切换到新窗口的操作

WebDriver对象有window_handles 属性,这是一个列表对象, 里面包括了当前浏览器里面所有的窗口句柄。

for handle in wd.window_handles:
    # 先切换到该窗口
    wd.switch_to.window(handle)
    # 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口
    if 'Bing' in wd.title:
        # 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,
        break

wd.switch_to.window(handle)    --  handle 句柄对应网页窗口的id

# mainWindow变量保存当前窗口的句柄
mainWindow = wd.current_window_handle

8.radio/checkbox框选择选项,直接用WebElement的click方法

  element = wd.find_element(By.CSS_SELECTOR, '#s_radio input[name="teacher"]:checked')

  :checked 是CSS伪类选择,表示选择 checked 状态的元素,对 radio 和 checkbox 类型的input有效

  select选择框 selenium提供了一个select类

   select_by_value

   select_by_index

   去除选择

   deselect_by_value

Xpath

根节点用/

相对路径用// 从当前节点往下找

* 是一个通配符

所有div节点的所有直接子节点  //div/*

Xpath 可以根据属性来选择元素

[@属性名='属性值']

style属性值 包含 color 字符串的 页面元素 //*[contains(@style,'color')]

选择 style属性值 以 color 字符串 开头 的 页面元素//*[starts-with(@style,'color')]

 p类型第2个的子元素  p[2]

 选取p类型倒数第1个子元素 p[last()]

Xpath用竖线表示多个组合选择

元素的父节点用 /..

xpath也可以选择 后续 兄弟节点,用这样的语法 following-sibling::

xpath还可以选择 前面的 兄弟节点,用这样的语法 preceding-sibling::

Selenium常用的等待包括显式等待、隐式等待、强制等待

隐式等待是整个页面的等待。设置一个最长的等待时间,在规定时间内整个页面加载完成,则执行下一步,否则继续等待直到最长等待时间结束

                implicitly_wait(时间)

显式等待是针对某个元素的等待。在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在

              WebDriverWait 类,与until() 和until_not() 结合

强制等待:time.sleep()

appium

appium 测试移动端应用  appium 继承了webdriver

selenium 测试Web应用

链接地址:www.byhy.net

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

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

相关文章

OJAC近屿智能张立赛博士揭秘GPT Store:技术创新、商业模式与未来趋势

> - [Look!👀我们的大模型商业化落地产品](https://www.airecruitas.com/aigc) >- 📖更多AI资讯请👉🏾[关注](https://mp.weixin.qq.com/s/85qwuIydaaydMQz2g0rgMA) >- [Free三天集训营助教在线为您火热答疑…

多任务爬虫(多线程和多进程)

在一台计算机中,我们可以同时打开多个软件,例如同时浏览网页、听音乐、打字等,这是再正常不过的事情。但仔细想想,为什么计算机可以同时运行这么多软件呢? 这就涉及计算机中的两个名词:多进程和多线程。 同样&#xf…

通信入门系列——锁相环、平方环、Costas环

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、锁相环 1、压控振荡…

使用k-近邻算法改进约会网站的配对效果(kNN)

目录 谷歌笔记本(可选) 准备数据:从文本文件中解析数据 编写算法:编写kNN算法 分析数据:使用Matplotlib创建散点图 准备数据:归一化数值 测试算法:作为完整程序验证分类器 使用算法&…

SpringCloud(14)之SpringCloud Consul

我们知道 Eureka 2.X 遇到困难停止开发了,所以我们需要寻找其他的替代技术替代Eureka,这一小 节我们就讲解一个新的组件Consul。 一、Consul介绍 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式…

kali xrdp

Kali Linux 使用远程桌面连接——xrdp&xfce_kali xfce桌面-CSDN博客 Ubuntu/Debian/Kali xrdp远程桌面黑屏/空屏/无画面解决办法 - 知乎 (zhihu.com) sudo apt-get install xrdp -y sudo apt-get install xfce4 -ysudo systemctl enable xrdp --now systemctl status xrd…

【Latex】TeXstudio编译器选项修改

1、动机 编译国科大博士毕业答辩论文latex时报错 Package ctable Error: You must load ctable after tikz. 2、方法 经过搜索发现是因为这是中文模板,编译的选项不对,需要从 PDFLaTeX 调整到 XeLaTeX。于是操作如下 1)点击选项 2&#xf…

Flask——基于python完整实现客户端和服务器后端流式请求及响应

文章目录 本地客户端Flask服务器后端客户端/服务器端流式接收[打字机]效果 看了很多相关博客,但是都没有本地客户端和服务器后端的完整代码示例,有的也只说了如何流式获取后端结果,基本没有讲两端如何同时实现流式输入输出,特此整…

8.CSS层叠继承规则总结

CSS 层叠继承规则总结 经典真题 请简述一下 CSS 中的层叠规则 CSS 中的层叠继承规则 在前面《CSS属性的计算过程》中,我们介绍了每一个元素都有都有所有的属性,每一个属性都会通过一系列的计算过程得到最终的值。 这里来回顾一下计算过程&#xff0…

Node.js中如何处理异步编程

在Node.js中,处理异步编程是至关重要的技能。由于Node.js的单线程执行模型,异步编程可以极大地提高程序的性能和响应速度。本文将介绍几种常见的异步编程处理方式,并附上示例代码,帮助您更好地理解和应用异步编程技术。 回调函数…

家政小程序开发,引领家庭服务新时代的科技革命

随着科技的飞速发展,人们的生活方式正在发生深刻的变化。其中,家政服务作为日常生活的重要组成部分,也在经历着一场由小程序技术引领的科技革命。本文将探讨家政小程序的发展趋势、功能特点以及对家庭服务的深远影响。 一、家政小程序的发展…

NFTScan Labs,一个聚焦在 NFT 领域的开发者组织

NFTScan Labs 是一个聚焦在 NFT 领域的开发者组织,成立于 2021 年 3 月份。NFTScan Labs 核心成员从 2016 年开始涉足区块链领域,有多年开发经验和前沿行业认知,对加密钱包、区块链安全、链上数据追踪、DeFi、预言机、NFT 等领域有深入的研究…

2/22作业

1.按位置插入 void insert_pos(seq_p L,datetype value,int pos) { if(LNULL) { printf("入参为空\n"); return; } if(seq_full(L)) { printf("表已满\n"); return; } if(pos>L->len|…

Jenkins的使用GIT(4)

Jenkins的使用GIT 20211002 我们使用 Jenkins 集成外部 Git 仓库,实现对真实代码的拉取和构建。在这里,我们选用 Coding/Github/Gitee 等都可以作为我们的代码源 1 生成公钥私钥 首先,我们先来配置公钥和私钥。这是 Jenkins 访问 Git 私有库…

【nvm】下载安装及使用(包含windows和Linux)

目录 1、Windows版本下载及安装 2、Linux下载及安装 下载 安装 3、使用 在不借助第三方工具的情况下切换node版本,只能卸载现有版本,安装需要的版本,这样显然很麻烦。而nvm就很好的帮我们解决了这个问题。 nvm(node.js vers…

QT中调用python

一.概述 1.Python功能强大,很多Qt或者c/c开发不方便的功能可以由Python编码开发,尤其是一些算法库的应用上,然后Qt调用Python。 2.在Qt调用Python的过程中,必须要安装python环境,并且Qt Creator中编译器与Python的版…

IDEA启动Springboot报错:无效的目标发行版:17 的解决办法

无效的目标发行版:17 的解决办法 一般有两个原因,一可能是本地没有安装JDK17,需要安装后然后在IDEA中选择对应版本;二可能是因为IDEA版本太低,不支持17,需要升级IDEA版本。然后在File->Project Struct…

未雨绸缪,才是真正的高手

由于电脑用了五年半,刚换了新型电脑主机,人老了摸索掌握新操作方法较困难,所以今天的网文作业只好从简,即本“人民体验官”推广人民日报官方微博文化产品《夜读:真正的高手,都懂得凡事提前一步》。 图&…

Flutter常用命令,持续更新

目录 前言 Flutter 常用命令 Dart 常用命令 adb 常用命令(用于 Android 开发) 前言 当在开发Flutter项目时,熟悉一些常用的命令是非常重要的。这些命令可以帮助你执行各种任务,从构建应用程序到调试和测试。以下是一些Flutte…

Draw.io | 强大并且免费的画图工具

前言 作为一个技术人,总是需要一个称手的画图工具,日常工作中,画的最多的图应该就是流程图,思维导图,如果开发时间比较久的话,可能还需要画架构图。刚开始的时候,我下载了各种工具,像…