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,一经查实,立即删除!

相关文章

ubuntu环境下openssl库的简单使用

安装 sudo apt-get install libssl-devaes算法demo 编译&#xff1a;gcc aes.c -lssl -lcrypto -o aes 运行&#xff1a;./aes #include<stdio.h> #include<stdlib.h> #include<string.h> #include<openssl/aes.h>#define AES_KEY_SIZE 128 // AES密…

UNI-APP_app跳转企业微信客服对话

uniapp打包app&#xff0c;app里点击客服&#xff0c;跳转企业微信客服对话。为什么是企业微信&#xff1f;因为只有微信小程序才可以通过 button 的 open-type‘share’ 打开微信客服对话框&#xff08;微信客服要在公众号平台配置&#xff09; 1、appId获取 &#xff08;1&a…

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

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

C#_各式各样的参数(引用参数、输出参数、数组参数、具名参数、可选参数)

引用参数 值参数和引用参数的区别在于传参时是否会创建参数副本&#xff1a;值参数不会创建副本&#xff0c;而引用参数会创建副本。 换言之&#xff0c;值类型参数的参数与实体之间无直接关联&#xff0c;修改参数不会对实体产生影响&#xff1b;引用类型参数的参数与实体可视…

6.微格式

微格式 经典真题 知道什么是微格式吗&#xff1f;谈谈理解。在前端构建中应该考虑微格式吗&#xff1f; 微格式介绍 所谓微格式&#xff0c;是建立在已有的、被广泛采用的标准基础之上的一组简单的、开放的数据格式。 具体表现是把语义嵌入到 HTML 中&#xff0c;以便有助…

通过SSH 可以访问Ubuntu Desktop吗?

你可以在 Ubuntu Desktop 上开启 SSH 服务&#xff0c;以便其他机器可以通过 SSH 连接到你的服务器。以下是在 Ubuntu Desktop 上开启 SSH 服务的步骤&#xff1a; 打开终端 (Terminal) 应用程序。 输入以下命令安装 OpenSSH 服务器&#xff1a; sudo apt-get update sudo ap…

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

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

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

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

重磅!MongoDB推出Atlas Stream Processing公共预览版

日前&#xff0c;MongoDB宣布推出Atlas Stream Processing公共预览版。 在Atlas平台上有兴趣尝试这项功能的开发者都享有完全的访问权限&#xff0c;可前往“阅读原文”链接点击了解更多详细信息或立即开始使用。 开发者喜欢文档型数据库的灵活性、易用性以及Query API查询方…

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

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

js过滤取出对象中改变的属性和值

朋友公司的面试题 &#xff0c;取出对象中被改变的属性和值 const obj1 { a: 1, b: 2, c: 4 }; const obj2 { a: 1, b: 2, c: 5 }; 方法1 function testFun(obj1, obj2) {const diff {};const keys1 Object.keys(obj1);const keys2 Object.keys(obj2);const allKyes keys…

【深度学习】Gemini 1.0 Pro 如何让chatGPT扮演stable diffusion的提示词工程师

google也出了一个chatGPT&#xff0c;免费申请使用&#xff1a; https://aistudio.google.com/app/prompts/new_chat https://github.com/google/generative-ai-docs/blob/main/site/en/tutorials/rest_quickstart.ipynb 模型信息&#xff1a; $ curl https://generativelan…

SpringCloud(14)之SpringCloud Consul

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

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…

中级.NET开发工程师面试经历

文章目录 前言面试题目&#xff08;只记录了还记得的部分&#xff09;一.简单说下.NETCORE的生命周期&#xff1f;二.C#如何保证在并发情况下接口不会被重复触发&#xff1f;三.引用类型和值类型有什么区别&#xff1f;四.那怎样能让引用类型和值类型一样&#xff0c;在赋值的时…

【Latex】TeXstudio编译器选项修改

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

linux 文件目录操作命令【重点】

目录 ls cd cat more tail【工作中使用多】 mkdir rmdir rm ls 作用: 显示指定目录下的内容 语法: ls [-al] [dir] 说明: -a 显示所有文件及目录 (. 开头的隐藏文件也会列出) -l 除文件名称外&#xff0c;同时将文件型态(d表示目录&#xff0c;-表示文件)、权限…

SpringMVC POST请求传参 属性名字母大写注入失败解决方案

问题描述&#xff1a; 我现在有一个接口通过一个实体(RequestBody)去接收一系列的参数&#xff0c;前端传参为一个JSON字符串&#xff0c;但是当我的属性名以大写字母开头(有的中间还有下划线)&#xff0c;或者第二个字母是大写字母的时候&#xff0c;我发现后端接收不到参数值…

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

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

C++字符串类

C中有两种主要的字符串类&#xff1a;std::string 和 std::wstring。 std::string std::string 是 C 标准库中用于处理 ASCII 字符串的类。它提供了丰富的方法来操作字符串&#xff0c;包括插入、删除、查找子串、比较等功能。使用 std::string 需要包含头文件 <string>…