UI自动化之多窗口定位下拉框元素+保存页面快照实战

2020-04-30 18:04:49 浏览数 (1)

# 在UI 自动化测试中,经常会遇到下拉框的应用。针对下拉框,Selenium 提供了Select类来处理,

# Select类在select模块中。使用Select类首先需要导入,导入方式是 from selenium.webdriver.support.select import Select。

# 在Select类中,构造方法的参数是 webelement,检查指定的元素时,如果参数错误就会抛出UnexpectedTagNameExpection的异常错误信息。

# 在Select类中提供了很多方法可在下拉框定位中使用,下面具体介绍这些方法的应用,昨天分享的百度下拉框实战代码:

代码语言:javascript复制
# -*-coding:utf-8-*-
# author:shichao

# 在UI 自动化测试中,经常会遇到下拉框的应用。针对下拉框,Selenium 提供了Select类来处理,
# Select类在select模块中。使用Select类首先需要导入,导入方式是 from selenium.webdriver.support.select import Select。
# 在Select类中,构造方法的参数是 webelement,检查指定的元素时,如果参数错误就会抛出UnexpectedTagNameExpection的异常错误信息。
# 在Select类中提供了很多方法可在下拉框定位中使用,下面具体介绍这些方法的应用

from selenium import webdriver
# 导入select类,由selenium提供
from selenium.webdriver.support.select import Select
from selenium.webdriver.common.action_chains import ActionChains
# UI自动化测试过程中,经常遇到那种,需要鼠标悬浮后,要操作的才会元素出现的这种场景,那么我们就要模拟鼠标悬浮到某一个位置,做一系列的连贯操作,
# Selenium给我们提供了ActionChains模块,不懂这块的可以百度检索
import time as t

dr = webdriver.Chrome()
dr.maximize_window()
dr.implicitly_wait(20)
# 隐式等待20s
dr.get('http://www.baidu.com/')
t.sleep(2)
sz = dr.find_element_by_css_selector('#u1 > a.pf')
ActionChains(dr).move_to_element(sz).perform()
#将鼠标悬浮至百度首页设置文本
t.sleep(2)
dr.find_element_by_css_selector('#wrapper > div.bdpfmenu > a:nth-child(3)').click()
# 点击高级搜索进入搜索页
t.sleep(2)
'''
高级搜索页select标签 HTML代码如下
<select name="gpc">
<option value="stf" selected="selected">全部时间</option>
<option value="stf=1587804005.407,1587890405.407|stftype=1">最近一天</option>
<option value="stf=1587285605.407,1587890405.407|stftype=1">最近一周</option>
<option value="stf=1585212005.407,1587890405.407|stftype=1">最近一月</option>
<option value="stf=1556268005.407,1587890405.407|stftype=1">最近一年</option>
</select>
'''
gpc = dr.find_element_by_name('gpc')
# 定位处下拉框的元素属性
select = Select(gpc)
# 实例化Select类
select.select_by_visible_text('最近一天')
# 按照取文本的方法来选择下拉框下的内容
'''
定位下拉框的方法有很多,下面在简单介绍2种方法给大家:
select.select_by_value('stf=1587804005.407,1587890405.407|stftype=1') 
# 按照value值去选择下拉框的内容

select.select_by_index(1)
# 按照索引去选择下拉框的内容  ps:索引是从0开始,0为第一个"最近一天在第二个所以填为1"
'''
print('下拉框选择最新的内容是:', gpc.get_attribute('value'))
t.sleep(2)
dr.quit()

接着昨天的下拉框定位分享,今天我们在接着前几天学习的多窗口实战进行结合操作[ 多窗口定位下拉框元素以及保存页面当前快照实战 ]

Selenium与页面的交互实战

今天要操作的场景为打开人M日报首页然后点击打开健康时报的子页面实现悬浮在下拉框的日报栏,然后进行保存当前页面的快照到E盘,然后切回登录页进行关闭页面,结束实战,大家可copy到解释器进行试运行或者实操

代码语言:javascript复制
# -*-coding:utf-8-*-
# author:shichao
from selenium import webdriver
# 导入select类,由selenium提供
from selenium.webdriver.common.action_chains import ActionChains
# UI自动化测试过程中,经常遇到那种,需要鼠标悬浮后,要操作的才会元素出现的这种场景,那么我们就要模拟鼠标悬浮到某一个位置,做一系列的连贯操作,
# Selenium给我们提供了ActionChains模块,不懂这块的可以百度检索
import time as t
dr = webdriver.Chrome()
dr.maximize_window()
dr.implicitly_wait(10)
# 隐式等待10s
dr.get('http://www.people.com.cn/')
t.sleep(1)
jb = dr.current_window_handle
# 获取当前登录页窗口的句柄
print('当前登录页窗口句柄:', jb)
rmrbx = dr.find_element_by_css_selector('#rmw_nav > div > header > div.sub_nav_top > span:nth-child(5)')
# 实现悬浮到人民日报系栏
ActionChains(dr).move_to_element(rmrbx).perform()
# move_to_element 鼠标移动到某一个元素上,结束
t.sleep(2)
dr.find_element_by_css_selector('#rmw_nav > div > header > div.sub_nav_top > span:nth-child(5) > ul > li:nth-child(6) > a').click()
# 点击人民日报系栏下的健康时报
t.sleep(3)
print(u'成功打开健康时报页面')
jbs = dr.window_handles
# 获取当前窗口句柄集权合(列表类型)
for jbk in jbs:
#判断JB不是当前窗口句柄
if jbk != jb:
        dr.switch_to.window(jbk)
# driver.switch_to.window(handles[num]) # 跳转到第num个窗口,从0开始 多种写法
        t.sleep(2)
        rmrb = dr.find_element_by_css_selector('body > div.content > div.right_c > div.head_c > span:nth-child(1)')
# 实现悬浮到日报栏
        ActionChains(dr).move_to_element(rmrb).perform()
        t.sleep(2)
        dr.save_screenshot('E:/rb.png')
# 获取当前页面截图,点击E盘可以查看对应图片打开就是日报栏下的数据信息
        t.sleep(2)
        dr.quit()
#切换到登录页面
dr.switch_to.window(jb)
t.sleep(2)
dr.refresh()
# 刷新页面
dr.quit()

以上就是UI自动化中与页面常操作交互,后期会持续更新,简单操作,只求每天进步一点,python都不断地更新,你能力还不更新,还在等什么.

0 人点赞