用python实现ui自动化测试(二)

1.关于多元素定位

元素定位从大的分类而言,分为两种:

1、单个元素的定位

2、多个元素的定位

  当元素属性的ID,name等完全一致的时候,那么这个时候,你发现无法使用单个

元素的方式来解决,那么久可以使用多个元素定位的方法来进行

  解决思路:

获取元素的属性,其实是一个列表,看我们被定位的目标属性是在第几位,那么久使用索引

 

想定位元素的前提

from selenium import webdriver

1.当我们想要运用tag_name的多元素定位:

代码演示

复制代码
1 driver=webdriver.Chrome()
2 driver.get('http://www.baidu.com')
3 lists=driver.find_elements_by_tag_name('input')
4 t.sleep(5)
5 lists[7].send_keys('美女')
6 t.sleep(5)
7 lists[8].click()
8 t.sleep(5)
9 driver.quit()
View Code
复制代码

首先我们选用的百度的网站作为访问对象,我们第一步先需要将这个变量进行赋值

lists=driver.find_elements_by_tag_name('input')

这一行代码的意思就是我们将driver.find_elements_by_tag_name('input')赋值给lists

根据我们要执行的那一条按照索引进行查找输入相关操作

 

 

 根据上图我们可以看到 tag_name=input

我们按照标签input从一次查找 捕捉到搜索栏input索引为7

按照这个我们接着查找

 

 百度一下按钮索引为8

所以我们综上述代码所展现的就是

我们在输入框中输入关键字并且点击百度一下按钮

2.进入框架关键字:switch_to.frame

我们以QQ邮箱为例

 

 我们可以看到该网页其实是由多个框架组成的 ,如果我们按照以往的元素定位进行捕捉窗口是无法进行进行操作的,这时候我们就需要进入内部框架然后进行相关操作

复制代码
 1 from selenium import webdriver
 2 import time as t
 3 driver=webdriver.Chrome()
 4 driver.maximize_window()
 5 driver.get('https://mail.qq.com/')
 6 t.sleep(10)
 7 # iframe通过ID的方式进入login_frame
 8 driver.switch_to.frame('login_frame')
 9 # name的方式
10 driver.switch_to.frame('login_frame')
11 t.sleep(10)
12 driver.find_element_by_partial_link_text('注册').click()
13 t.sleep(10)
14 driver.close()
View Code
复制代码

在上述代码中 我们先是进入了QQ邮箱,紧接着在邮箱的网址中,我们进入了QQ登录的框架

才能进行对里面的元素进行操作

我们所对知识进行梳理,

##逻辑方面  先获取网址--进入网站所要操作的框架并且进入--用元素定位法定位框架内部的元素---执行相关操作

 

3.关于selenium的代码

3.1.获取元素属性的值:get_attribute()

所有的input里面输入的值,都是value的属性

我们用拉勾网进行操作

复制代码
 1 from selenium import webdriver
 2 import  time as t
 3 driver=webdriver.Chrome()
 4 driver.maximize_window()
 5 driver.get('https://www.lagou.com/')
 6 t.sleep(5)
 7 #点击登录按钮
 8 driver.find_element_by_partial_link_text('登录').click()
 9 t.sleep(5)
10 login=driver.find_element_by_xpath('/html/body/div[3]/div[1]/div/div/div[2]/div[3]/div[1]/div/div[2]/form/div[1]/div/input')
11 print(login.get_attribute('placeholder'))
12 t.sleep(5)
13 driver.quit()
View Code
复制代码

 

 通过上图我们可以我们的期望结果为:请输入常用手机号

 

 3.2.是否可见:is_displayed()

我们用百度的页面作为案例

复制代码
1 from selenium import webdriver
2 import  time as t
3 driver=webdriver.Chrome()
4 driver.maximize_window()
5 driver.get('https://www.baidu.com/')
6 aboutBaidu=driver.find_element_by_partial_link_text('关于百度')
7 #is_displayed():是否可见
8 print(aboutBaidu.is_displayed())
9 driver.quit()
View Code
复制代码

我们可以先查看官网中拥有‘关于百度’相关链接

 

 如果存在则输出True 如果不存在则输出False

复制代码
1 from selenium import webdriver
2 import  time as t
3 driver=webdriver.Chrome()
4 driver.maximize_window()
5 driver.get('https://www.baidu.com/')
6 aboutBaidu=driver.find_element_by_partial_link_text('关于百度')
7 #is_displayed():是否可见
8 print(aboutBaidu.is_displayed())
9 driver.quit()
View Code
复制代码

输出结果

 

 

3.3.查看是否可编辑:is_enabled()

当我们想要查看这个元素是否可以编辑是 就可以使用is_enablend()关键字进行查看

可编辑为True 不可编辑为False

复制代码
1 from selenium import webdriver
2 import  time as t
3 driver=webdriver.Chrome()
4 driver.maximize_window()
5 driver.get('https://www.baidu.com/')
6 so=driver.find_element_by_id('kw')
7 print(so.is_enabled())
8 driver.quit()
View Code
复制代码

3.4.针对单按钮是否勾选:is_selected()

当我们想要查看这个按钮是否进行勾选 我们可以通过is_selected进行查找

复制代码
 1 from selenium import webdriver
 2 import  time as t
 3 driver=webdriver.Chrome()
 4 driver.maximize_window()
 5 driver.get('https://mail.sina.com.cn/')
 6 autoLogin=driver.find_element_by_id('store1')
 7 t.sleep(5)
 8 print('是否勾选:',autoLogin.is_selected())
 9 t.sleep(5)
10 autoLogin.click()
11 print('是否勾选:',autoLogin.is_selected())
12 driver.quit()
View Code
复制代码

因为新浪的按钮默认为自动登录

所以我们以一次获取的时候为True

我们对该按钮执行了点击操作

这时候我们在进行获取为False

 

 3.5.清空操作元素里面的关键字:clear

当我们在进行自动化测试的时候需要重复的进行搜索 ,且想一遍进行操作的情况下

我们会使用clear(清空)操作来进行

复制代码
 1 from selenium import webdriver
 2 import  time as t
 3 driver=webdriver.Chrome()
 4 driver.maximize_window()
 5 driver.get('http://www.baidu.com/')
 6 so=driver.find_element_by_id('kw')
 7 so.send_keys('贾超太丑了')
 8 t.sleep(5)
 9 so.clear()
10 t.sleep(5)
11 driver.quit()
View Code
复制代码

3.6获取测试地址:assert断言 期望结果与实际结果进行比较

获取的是地址用到的是current_url

获取当前源代码用的是page_source

获取页面的title:tltle

当我们断言的时候 如果为True的话才会运行接下来的动作

复制代码
 1 from selenium import webdriver
 2 import time as t
 3 driver=webdriver.Chrome()
 4 driver.get('https://www.baidu.com/')
 5 print('获取测试地址:',driver.current_url)
 6 print('获取当前源代码:',driver.page_source)
 7 # 断言
 8 assert driver.current_url.endswith('idu.com/')==True
 9 # title
10 print(driver.title)
11 assert driver.title=='百度一下,你就知道'
12 driver.close()
View Code
复制代码

3.7关于页面的前进、后退、刷新

前进:forward

后退:back

刷新:refresh

复制代码
 1 driver=webdriver.Chrome()
 2 driver.get('https://www.baidu.com/')
 3 t.sleep(3)
 4 driver.get('https://www.so.com/')
 5 t.sleep(3)
 6 driver.back()
 7 print('地址为:',driver.current_url)
 8 t.sleep(3)
 9 driver.forward()
10 print('地址为:',driver.current_url)
11 t.sleep(3)
12 #刷新
13 driver.find_element_by_id('input').send_keys('美女')
14 t.sleep(3)
15 driver.refresh()
16 t.sleep(3)
17 driver.close()
View Code
复制代码

4.关于多窗口的实战

需求:出现两个窗口 ,切换成新的窗口将旧窗口关闭

 

复制代码
 1 from selenium import webdriver
 2 import time as t
 3 driver=webdriver.Chrome()
 4 driver.get('https://www.baidu.com/')
 5 #获取当前窗口
 6 nowWindow=driver.current_window_handle
 7 t.sleep(5)
 8 driver.find_element_by_partial_link_text('hao').click()
 9 t.sleep(5)
10 #获取所有的窗口
11 allWindow=driver.window_handles
12 t.sleep(5)
13 for item in allWindow:
14     #判断窗口不是当前窗口
15     if item!=nowWindow:
16         driver.switch_to.window(item)     #获取新创建窗口
17         t.sleep(5)
18         driver.find_element_by_xpath('//*[@id="search"]/form/div[2]/input').send_keys('美女')   #获取新程序xpath
19         t.sleep(5)
20         driver.close()
21 #切换到当前窗口
22 driver.switch_to.window(nowWindow)
23 t.sleep(5)
24 driver.find_element_by_id('kw').send_keys('美女')
25 t.sleep(5)
26 driver.quit()
View Code
复制代码

5.关于下拉框处理方式

因为下拉框不能使用常规的ID name等方式直接获取 所以我们需要借助到Select的类 来实现处理下拉框

导入方法:form selenium.webdriver.support.select import Select

因为我们在处理下拉框的时候 需要导入Select里的类  下拉框里面的选项本质就是类的方法,所以我们需要对下拉框进行实例化

复制代码
 1 from selenium import webdriver
 2 from selenium.webdriver.support.select import Select
 3 import time as t
 4 driver=webdriver.Chrome()
 5 driver.maximize_window()
 6 driver.get('file:///D:/jiachao/app/ui%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/%E7%BB%83%E4%B9%A0.html')
 7 t.sleep(5)
 8 nr=driver.find_element_by_id('nr')
 9 #针对Select类的实例化
10 select=Select(webelement=nr)
11 #索引方式
12 # select.select_by_index(3)
13 #value方式
14 # select.select_by_value('Java')
15 #文本的方式
16 select.select_by_visible_text('Java语言')
17 t.sleep(5)
18 driver.quit()
View Code
复制代码

利用索引的方式:select_by_index()

利用value的方式:select_by_value

利用文本的方式:select_by_visible_text

posted on   钢镚芽儿哟  阅读(699)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示