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.hqwc.cn/news/485306.html

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

相关文章

#LLM入门|Prompt#1.7_文本拓展_Expanding

输入简短文本,生成更加丰富的长文。 “温度”(temperature):控制文本生成的多样性。 一、定制客户邮件 根据客户的评价和其中的情感倾向,使用大语言模型针对性地生成回复邮件。将大大提升客户满意度。 # 我们可以在…

【算法与数据结构】417、LeetCode太平洋大西洋水流问题

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:题目要求雨水既能流向太平洋也能流向大西洋的网格。雨水流向取决于网格的高度。一个比较直接的方式是对…

c++实现栈和队列类

c实现栈和队列类 栈(Stack)Stack示意图Stack.cpp 队列(queue)queue 示意图queue.cpp 栈(Stack) Stack示意图 Stack.cpp #pragma once #include "ListStu.cpp"template<typename T> class Stack { public: /* * void push(T& tDate)* 参数一 &#xff1a;…

SQL库操作

1、创建数据库 概念 创建数据库&#xff1a;根据项目需求创建一个存储数据的仓库 使用create database 数据库名字创建 数据库层面可以指定字符集:charset/character set 数据库层面可以指定校对集:collate 创建数据库会在磁盘指定存放处产生一个文件夹 创建语法 create …

mysql优化指南之优化篇

二、优化 现在的理解数据库优化有四个维度&#xff0c;分别是&#xff1a; 硬件升级、系统配置、表结构设计、SQL语句及索引。 那优化的成本和效果分别如下&#xff1a; 优化成本&#xff1a;硬件升级>系统配置>表结构设计>SQL语句及索引。 优化效果&#xff1a;…

【MATLAB GUI】 5. 图像处理菜单(菜单编辑器)

看B站up主freexyn的freexyn编程实例视频教程系列36Matlab GUI的学习笔记 任务要求设计一个图像处理菜单&#xff0c;实现图像的打开导入、灰度处理、存储等功能 修改过文件名&#xff0c;所以运行的时候会有一点点报错&#xff0c;但是不影响运行 打开工具栏下边的菜单编辑器…

【数据结构】链式队列

链式队列实现&#xff1a; 1.创建一个空队列 2.尾插法入队 3.头删法出队 4.遍历队列 一、main函数 #include <stdio.h> #include "./3.linkqueue.h" int main(int…

【智慧零售】门店管理设备解决方案,为企业数字化运营升级赋能

2023年我国零售总额超47万亿元&#xff0c;广阔的市场提供了更多机遇&#xff0c;同时随着日趋激烈的竞争&#xff0c;企业也正面临着一些挑战&#xff1a;如何才能有效提升门店生产效率&#xff1f;降低门店运营成本&#xff1f;提高市场竞争力&#xff1f; 零售企业认识到通…

算法——模拟

1. 什么是模拟算法&#xff1f; 官方一点来说 模拟算法&#xff08;Simulation Algorithm&#xff09;是一种通过模拟现实或抽象系统的运行过程来研究、分析或解决问题的方法。它通常涉及创建一个模型&#xff0c;模拟系统中的各种事件和过程&#xff0c;以便观察系统的行为&a…

《VitePress 简易速速上手小册》第8章 安全性与部署(2024 最新版)

文章目录 8.1 安全最佳实践8.1.1 基础知识点解析8.1.2 重点案例&#xff1a;个人博客8.1.3 拓展案例 1&#xff1a;在线商店8.1.4 拓展案例 2&#xff1a;企业网站 8.2 部署到 GitHub Pages 和其他平台8.2.1 基础知识点解析8.2.2 重点案例&#xff1a;个人博客部署到 GitHub Pa…

【高德地图】Android高德地图控件交互详细介绍

&#x1f4d6;第5章 与地图控件交互 ✅控件交互&#x1f9ca;缩放按钮&#x1f9ca;指南针&#x1f9ca;定位按钮&#x1f9ca;地图Logo ✅手势交互&#x1f9ca;缩放手势&#x1f9ca;滑动手势&#x1f9ca;旋转手势&#x1f9ca;倾斜手势&#x1f9ca;指定屏幕中心点的手势操…

【机器学习的主要任务和应用领域】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱 简述概要 了解机器学习的主要任务和应用领域 知识图谱 机器学习的主要任务可以分为监督学习、无监督学习和半监督学习。 监督学习&#xff1a;这是机器学习中最为常见的一类任务&#xff0c;基于已知类…