day15 Ui自动化元素的定位

 

day15 元素的定位Ui自动化元素的定位1、火狐浏览器安装try xpath2、元素定位思路:(1)查看页面元素,确认能够唯一定位到元素的属性,比如id,文案3、学习xpath cssSelector 手写定位方式xpath(xpath 定位尽量已属性定位为主,层级为辅)//*  获取当前页面的全部//*[@id='i1'] 可以通过id属性进行定位,@代表引用属性//select[4]如果不存在唯一取值,可以使用角标取值//div[@class='driver'][1]/div[@class='inner'][1]/input  相对路径层级定位//select[@size='4'and @multiple='multiple'] 多属性确立唯一
cssSelector 多使用这种方法# 代表id#i1.inner代表class[placeholder="请通过ID定位元素"] 通过属性定位input[placeholder="请通过ID定位元素"]select[size='4'][multiple="multiple"]  多属性确立唯一问题一:什么时候用css selector 什么时候用xpath由于css selector 没有角标定位方式,如果定位的元素无法根据属性确立唯一只能通过xpath进行角标定位

4、18种定位方式

from selenium import webdriverdriver=webdriver.Chrome();driver.get("http://ui.imdsx.cn/uitester/")#滚动条到最上面
js="window.scrollTo(0,0)"
driver.execute_script(js)"""
8种单数定位方式
"""#id进行定位
#
# driver.find_element_by_id("i1").send_keys("11")
#
# #name定位方式
#
# driver.find_element_by_name("name").send_keys("22")
#
# #文案定位a中的文案
#
# driver.find_element_by_link_text("新建标签页面").click()
#
# #1、标签名定位,如果有很多个相同的标签,获取第一个标签
# #2、最不常用
#
# driver.find_element_by_tag_name('input').send_keys('1111')#使用xpath
# driver.find_element_by_xpath('//*[@id="i1"]').send_keys("333")#通过css定位
# driver.find_element_by_css_selector("#i1").send_keys("555")
#
# driver.find_element_by_css_selector('input[name="name"]').send_keys("666")"""
8种复数定位方式,在8种单数的基础是加复数形式,所有的复数返回的都是列表
"""
# driver.find_elements_by_id()"""
最后两种
"""
driver.find_elements_by_id()#可以按照下面的写法进行定位
driver.find_element('id','i1')
driver.find_elements()

5、浏览器相关操作

from  selenium import  webdriver"""
使用selenium对浏览器的操作
"""driver=webdriver.Chrome()
driver.get("http://ui.imdsx.cn/uitester/")
js="window.scrollTo(0,0)"
driver.execute_script(js)#获取浏览器大小
# size=driver.get_window_size()
# print(size)
#
# #设置浏览器的大小
#
# driver.set_window_size(200,200)
#最大化
# driver.maximize_window()
# #截图
# driver.get_screenshot_as_file('aa.png')#执行js
# driver.execute_script('js')#switch切换浏览器窗口
# driver.find_element_by_link_text("新建标签页面").click()
#
# #获取当前浏览器所打开全部tag标识
# print(driver.window_handles)
# #获取当前浏览当前tag的表示
# print(driver.current_window_handle)
#
# handle=driver.window_handles[-1]
# #切换到最新的页面,这个方法过期,已经不t推荐使用了
# driver.switch_to_window(handle)
# #最新使用这个方法
# driver.switch_to.window(handle)
#
# driver.close()#勾选checkbox
on=driver.find_element_by_css_selector("#on")off=driver.find_element_by_css_selector("#off")#判断是否已经勾选,已勾选返回true,未勾选返回false
print(on.is_selected())
print(off.is_selected())#关闭当前页面,当一个浏览器出现多个页面
# driver.close()
#退出驱动# driver.quit()

6、iframe相关操作

from  selenium import  webdriver"""
iframe的操作
"""driver=webdriver.Chrome()
driver.get("http://ui.imdsx.cn/uitester/")
js="window.scrollTo(0,0)"
driver.execute_script(js)#切换iframe

driver.switch_to.frame("top-frame")driver.find_element_by_css_selector("#newtag").send_keys("1111")driver.switch_to.frame("baidu-frame")
driver.find_element_by_css_selector("#kw").send_keys("222")
#返回上一层

driver.switch_to.parent_frame()
driver.find_element_by_css_selector("#newtag").click()#直接返回默认层

driver.switch_to.default_content()

7、页面弹框相关操作

from  selenium import  webdriver
import time"""
弹框的操作
"""driver=webdriver.Chrome()
driver.get("http://ui.imdsx.cn/uitester/")
js="window.scrollTo(0,0)"
driver.execute_script(js)#点击出现弹框
# driver.find_element_by_css_selector("#alert").click()
#
# time.sleep(2)
# #点击确认
# driver.switch_to.alert.accept()#取消按钮
driver.find_element_by_css_selector("#confirm").click()
time.sleep(2)
driver.switch_to.alert.dismiss()

8、select相关操作

from  selenium import  webdriver
import time"""
select相关操作
"""driver=webdriver.Chrome()
driver.get("http://ui.imdsx.cn/html/")
js="window.scrollTo(0,1800)"
driver.execute_script(js)sele=driver.find_element_by_xpath('//select[1]')from selenium.webdriver.support.select import Select#select模块只支持select元素
#value=4的元素
Select(sele).select_by_value("4")
#角标为第3个的元素
Select(sele).select_by_index(3)

9、鼠标悬浮的相关操作

 1 element=driver.find_element_by_css_selector("#dis1")
 2 
 3 #判断元素是否可见,可见返回true,不可见返回false
 4 
 5 print(element.is_displayed())
 6 
 7 from selenium.webdriver.common.action_chains import ActionChains
 8 #1、先定位到鼠标要悬浮的元素
 9 a=driver.find_element_by_css_selector("#a")
10 dis1=driver.find_element_by_css_selector('#dis1')
11 #2、将鼠标移动到元素上,再进行点击
12 ActionChains(driver).move_to_element(a).click(dis1).perform()

10、鼠标的拖拽操作

 

 1 from  selenium import  webdriver
 2 import time
 3 
 4 """
 5 鼠标拖拽相关操作
 6 """
 7 
 8 driver=webdriver.Chrome()
 9 driver.get("http://ui.imdsx.cn/move/")
10 
11 s1=driver.find_element_by_css_selector('#dragger1')
12 
13 t1=driver.find_element_by_css_selector('#i1')
14 
15 from selenium.webdriver.common.action_chains import ActionChains
16 
17 #从s1拖拽到t1
18 ActionChains(driver).drag_and_drop(s1,t1).perform()

 

转载于:https://www.cnblogs.com/zzzao/p/11108374.html

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

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

相关文章

几张图可以理解GC JVM调优的内容

public class ApiPurchaseOrderServiceApp {public static void main(String[] args) throws Exception {ApiPurchaseOrderServiceApp mnew ApiPurchaseOrderServiceApp();m.compute();//栈System.out.println("ok");//方法出口}public int compute(){int a1;//局部…

灵魂拷问!一起刷完了这份1307页的安卓面试宝典吧,不吃透都对不起自己

前言 每个程序员都有一个梦想,那就是进一线互联网公司深造,不要跟我说你不想进去,如果给你一个这样的平台,不管是薪资待遇还是接触的高度来说,对我们程序员来说都是一个机会,我以前有一个同事,…

ShardingSphere分库分表实战

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于…

灵魂拷问!细数Android开发者的艰辛历程,成功入职阿里

什么是中年危机 根据权威数据显示,国内IT程序员鼎盛时期是在25-27岁左右,30岁对于程序员而言完全是一个38线,接着就是转业转岗的事情,这一点在业界也算是一个共识了。 大学毕业步入IT行业普遍年龄也是在22岁左右,然而…

JMM模型到并发编程

电脑:内存 L1 L2 L3 缓存 CPU ctrlatldel就可以看到 Java 有线程内存,在执行线程的时候,会从主内存把变量加载到工作内存(缓存),所以,在多线程同时改变一个静态变量时候,实际是分开…

焦虑的移动互联网开发者如何破局?专题解析

尴尬的35岁 不知道是哪个人提出的职场35岁就要面临被淘汰的定律,因为35岁定律本来就是个伪命题,尤其是在IT行业! 现在年八九百万的大学生毕业,他们虽然年轻活力,但是很多企业也将之“拒之门外”。 35岁的不要,二十几…

17.前端路由router-07keep-alive

keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能, 由于是一个抽象组件,所以在v页面渲染完毕后不会被渲染成一个DOM元素 当组件在keep-alive内被切换时组件的activated、deactivated这两个生命 周期钩子函数会…

使用IDEA创建Maven项目和Maven使用入门(配图详解)

本文详解的讲解了使用IDEA创建Maven项目,及Maven的基础入门。 1、打开IDEA,右上角选择File->New->Project 2、如图中所示选择Maven(可按自己所需添加,否则加载时速度很慢) 3、添加项目所需Groupld,ArtifactId,Ve…

jvisualvm安装Visual GC插件

给jdk自带的jvisualvm安装Visual GC插件,遇到Were sorry the java.net site has closed(我们很抱歉java.net网站已经关闭) 1、找到新的更新地址 visualvm新访问地址:https://visualvm.github.io/index.html 进入“Plugins”&…

来自阿里巴巴佛系安卓程序员的指南,专题解析

开头 中国互联网发展的这些年,如今90后程序员是中国程序员的主力军,互联网的热潮也让一批批00后蠢蠢欲动,尝试涌入互联网圈。 当程序员容易,当一个优秀的程序员需要不断学习,从初级程序员到高级程序员,从…

C#在WinForm中打开控制台显示

引用: namespace 测试使用 {public partial class Form1 : Form{[System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError true)][return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bo…

Redis+AQS

前言 对于java的单进程应用来说,存在资源竞争的场景可以使用synchronized关键字和Lock来对资源进行加锁,使整个操作具有原子性。但是对于多进程或者分布式的应用来说,上面提到的锁不共享,做不到互相通讯,所以就需要分…

disruptor 介绍

一、背景 1.来源 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内部的内存队列的延迟问题,而不是分布式队列。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。…

算法题+JVM+自定义View,详细的Android学习指南

前言 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~。 学算法真的很痛苦,虽然大数据现在很火,但找到适合自己定位的职业也未尝不是一种合理选择。 投百度的经历非…

用过的前端插件合集

用过的前端插件合集 FontAwesome字体 Font Awesome详细用法参见上述站点的Examples。 SweetAlert系列 SweetAlertSweetAlert2SweetAlert 到 SweetAlert2 升级指南示例: 基本使用: swal("标题","内容","success);使用SweetAlert…

CAS和AQS

CAS 全称(Compare And Swap),比较交换 Unsafe类是CAS的核心类,提供硬件级别的原子操作。 // 对象、对象的地址、预期值、修改值 public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);缺点&#xf…

系统盘点Android开发者必须掌握的知识点,全网疯传

最近在知乎上,有许多人在邀请我去回答“Android前景怎么样、是不是要凉了、是不是应该考虑要转行?”等一系列的问题。 想着可能有很多人都有这样的担心,于是就赶紧写篇文章,来跟你们谈下Android开发的前景到底怎么样?…

数据库操作DDL

show database; 查看所有数据库 drop database db_name; 删除数据库 create database db_name;创建数据库 一个数据库对应一个文件夹 create database if not exists db_name; show warnings; 查看所有警告 show create databae db_name;查看创建的数据库 create database if n…

细数Android开发者的艰辛历程,已拿offer附真题解析

笼统来说,中年程序员容易被淘汰的原因其实不外乎三点。 1、输出能力已到顶点。这个人奋斗十来年了,依旧碌碌无为,很明显这人的天花板就这样了,说白了,天赋就这样。 2、适应能力越来越差。年纪大,有家庭&…

原子操作类AtomicInteger详解

为什么需要AtomicInteger原子操作类? 对于Java中的运算操作,例如自增或自减,若没有进行额外的同步操作,在多线程环境下就是线程不安全的。num解析为numnum1,明显,这个操作不具备原子性,多线程并…