⽤python实现ui⾃动化测试(⼆)1.关于多元素定位
元素定位从⼤的分类⽽⾔,分为两种:
1、单个元素的定位
2、多个元素的定位
  当元素属性的ID,name等完全⼀致的时候,那么这个时候,你发现⽆法使⽤单个
元素的⽅式来解决,那么久可以使⽤多个元素定位的⽅法来进⾏
  解决思路:
获取元素的属性,其实是⼀个列表,看我们被定位的⽬标属性是在第⼏位,那么久使⽤索引
想定位元素的前提
from selenium import webdriver
1.当我们想要运⽤tag_name的多元素定位:
代码演⽰
1 driver=webdriver.Chrome()
('www.baidu')
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
⾸先我们选⽤的百度的⽹站作为访问对象,我们第⼀步先需要将这个变量进⾏赋值xpath语法 python
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邮箱为例
我们可以看到该⽹页其实是由多个框架组成的,如果我们按照以往的元素定位进⾏捕捉窗⼝是⽆法进⾏进⾏操作的,这时候我们就需要进⼊内部框架然后进⾏相关操作
1from selenium import webdriver
2import time as t
3 driver=webdriver.Chrome()
4 driver.maximize_window()
('mail.qq/')
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的属性
我们⽤拉勾⽹进⾏操作
1from selenium import webdriver
2import  time as t
3 driver=webdriver.Chrome()
4 driver.maximize_window()
('www.lagou/')
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')
_attribute('placeholder'))
12 t.sleep(5)
13 driver.quit()
View Code
通过上图我们可以我们的期望结果为:请输⼊常⽤⼿机号
3.2.是否可见:is_displayed()
我们⽤百度的页⾯作为案例
1from selenium import webdriver
2import  time as t
3 driver=webdriver.Chrome()
4 driver.maximize_window()
('www.baidu/')
6 aboutBaidu=driver.find_element_by_partial_link_text('关于百度')
7#is_displayed():是否可见
8print(aboutBaidu.is_displayed())
9 driver.quit()
View Code
我们可以先查看官⽹中拥有‘关于百度’相关链接
如果存在则输出True 如果不存在则输出False
1from selenium import webdriver
2import  time as t
3 driver=webdriver.Chrome()
4 driver.maximize_window()
('www.baidu/')
6 aboutBaidu=driver.find_element_by_partial_link_text('关于百度')
7#is_displayed():是否可见
8print(aboutBaidu.is_displayed())
9 driver.quit()
View Code
输出结果
3.3.查看是否可编辑:is_enabled()
当我们想要查看这个元素是否可以编辑是就可以使⽤is_enablend()关键字进⾏查看可编辑为True 不可编辑为False
1from selenium import webdriver
2import  time as t
3 driver=webdriver.Chrome()
4 driver.maximize_window()
('www.baidu/')
6 so=driver.find_element_by_id('kw')
7print(so.is_enabled())
8 driver.quit()
View Code
3.4.针对单按钮是否勾选:is_selected()
当我们想要查看这个按钮是否进⾏勾选我们可以通过is_selected进⾏查
1from selenium import webdriver
2import  time as t
3 driver=webdriver.Chrome()
4 driver.maximize_window()
('mail.sina/')
6 autoLogin=driver.find_element_by_id('store1')
7 t.sleep(5)
8print('是否勾选:',autoLogin.is_selected())
9 t.sleep(5)
10 autoLogin.click()
11print('是否勾选:',autoLogin.is_selected())
12 driver.quit()
View Code
因为新浪的按钮默认为⾃动登录
所以我们以⼀次获取的时候为True
我们对该按钮执⾏了点击操作
这时候我们在进⾏获取为False
3.5.清空操作元素⾥⾯的关键字:clear
当我们在进⾏⾃动化测试的时候需要重复的进⾏搜索,且想⼀遍进⾏操作的情况下我们会使⽤clear(清空)操作来进⾏
1from selenium import webdriver
2import  time as t
3 driver=webdriver.Chrome()
4 driver.maximize_window()
('www.baidu/')
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的话才会运⾏接下来的动作
1from selenium import webdriver
2import time as t
3 driver=webdriver.Chrome()
('www.baidu/')
5print('获取测试地址:',driver.current_url)
6print('获取当前源代码:',driver.page_source)
7# 断⾔
8assert driver.dswith('idu/')==True
9# title
10print(driver.title)
11assert driver.title=='百度⼀下,你就知道'
12 driver.close()
View Code
3.7关于页⾯的前进、后退、刷新
前进:forward
后退:back
刷新:refresh
1 driver=webdriver.Chrome()
('www.baidu/')
3 t.sleep(3)
('www.so/')
5 t.sleep(3)
6 driver.back()
7print('地址为:',driver.current_url)
8 t.sleep(3)
9 driver.forward()
10print('地址为:',driver.current_url)
11 t.sleep(3)
12#刷新
13 driver.find_element_by_id('input').send_keys('美⼥')
14 t.sleep(3)
fresh()
16 t.sleep(3)
17 driver.close()
View Code
4.关于多窗⼝的实战
需求:出现两个窗⼝,切换成新的窗⼝将旧窗⼝关闭
1from selenium import webdriver
2import time as t
3 driver=webdriver.Chrome()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。