300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Web自动化测试Selenium(4)frame切换/窗口切换/选择框--10-09

Web自动化测试Selenium(4)frame切换/窗口切换/选择框--10-09

时间:2019-05-25 14:09:56

相关推荐

Web自动化测试Selenium(4)frame切换/窗口切换/选择框--10-09

1. frame切换

1.1 问题描述

选择 class 属性值为 plant 的元素。

elements = wb.find_element_by_css_selector('.plant')

表示返回的elements的列表为空。

通过查看开发者模式可以看出这些元素是在一个叫 iframe的 元素中的。

1.2 frame 简介

iframe 元素非常的特殊, 在html语法中,frame 元素 或者iframe元素的内部 会包含一个 被嵌入的 另一份html文档。

在我们使用selenium打开一个网页是, 我们的操作范围 缺省是当前的 html , 并不包含被嵌入的html文档里面的内容。

1.3 frame 跳转

如果我们要 操作 被嵌入的 html 文档 中的元素, 就必须 切换操作范围 到 被嵌入的文档中。

wd.switch_to.frame(frame_reference)

其中iframe元素的id ‘frame1’ 或者 name属性值 ‘innerFrame’。

若没有上述属性,可以使用Webelement对象,使用 wb.find_elements_by_css_selector(’[src=“sample1.html”]’)

from selenium import webdriverimport traceback# 启动浏览器wb = webdriver.Chrome(r'')# 设置最大等待时长为 10秒wb.implicitly_wait(10)# 打开网址wb.get('http://cdn1.python3.vip/files/selenium/sample2.html')# 隐式等待wb.implicitly_wait(10)try:# 跳转HTML# 1. 根据id选择#wb.switch_to.frame('frame1')# 2. 根据Webelement对象进行选择,Webelement对象通过css selector 进行选择。wb.switch_to.frame(wb.find_element_by_css_selector('iframe[src="sample1.html"]'))# css选择器elements = wb.find_elements_by_css_selector('.plant')except:info = traceback.format_exc()print(info)else:for i in elements:print(i.text)finally:wb.close()

这时切换到某个iframe里面进行操作了,那么后续选择和操作界面元素 就都是在这个frame里面进行的。怎么切换回原来的主html呢?

wd.switch_to.default_content()

wb.switch_to.default_content()element = wb.find_element_by_css_selector('.baiyueheiyu')print(element.text)

2. 窗口切换

在网页上操作的时候,我们经常遇到,点击一个链接 或者 按钮,就会打开一个 新窗口, Selenium写自动化程序 在新窗口里面 打开一个新网址, 并且去自动化操作新窗口里面的元素.

from selenium import webdriver# 启动浏览器wb = webdriver.Chrome(r'')# 设置隐式等待时间wb.implicitly_wait(5)# 搜索wb.get('')# 定位元素element = wb.find_element_by_id('kw')# 搜索element.send_keys('selenium')# 定位百度按钮并点击wb.find_element_by_id('su').click()# 定位第二个连接wb.find_element_by_css_selector('div[id="content_left"]>div>h3>a')[1].click()print(wb.title)

显示仍为老窗口。

跳转新窗口

wd.switch_to.window(handle)

WebDriver对象有window_handles 属性,这是一个列表对象, 里面包括了当前浏览器里面所有的窗口句柄

from selenium import webdriver# 启动浏览器wb = webdriver.Chrome(r'')# 设置隐式等待时间wb.implicitly_wait(5)# 搜索wb.get('')# 定位元素element = wb.find_element_by_id('kw')# 搜索element.send_keys('selenium')# 定位百度按钮并点击wb.find_element_by_id('su').click()# 定位第二个连接wb.find_elements_by_css_selector('div[id="content_left"]>div>h3>a')[1].click()for handle in wb.window_handles:# 先切换到该窗口wb.switch_to.window(handle)# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口if '自动化工具' in wb.title:# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,breakprint(wb.title)

如果跳回原来的页面。

方法1. 继续遍历所有的话柄,然后找到跳转之前的网页,再进行跳转。

方法2. 可以保存老窗口的话柄

mainWindow变量保存当前窗口的句柄

mainWindow = wd.current_window_handle

通过前面保存的老窗口的句柄,自己切换到老窗口

wd.switch_to.window(mainWindow)

from selenium import webdriver# 启动浏览器wb = webdriver.Chrome(r'')# 设置隐式等待时间wb.implicitly_wait(5)# 搜索wb.get('')# 定位元素element = wb.find_element_by_id('kw')# 搜索element.send_keys('selenium')# 定位百度按钮并点击wb.find_element_by_id('su').click()# 定位第二个连接wb.find_elements_by_css_selector('div[id="content_left"]>div>h3>a')[1].click()mainWindow = wb.current_window_handlefor handle in wb.window_handles:# 先切换到该窗口wb.switch_to.window(handle)# 得到该窗口的标题栏字符串,判断是不是我们要操作的那个窗口if '自动化工具' in wb.title:# 如果是,那么这时候WebDriver对象就是对应的该该窗口,正好,跳出循环,breakprint(wb.title)wb.switch_to.window(mainWindow)print(wb.title)

3. 选择框

3.1 radio 选择框

radio框选择选项,直接用WebElement的click方法,模拟用户点击就可以了。

from selenium import webdriver# 启动浏览器wb = webdriver.Chrome(r'')# 隐式等待wb.implicitly_wait(3)# 输入网址wb.get('http://cdn1.python3.vip/files/selenium/test2.html')# 获取当前选中元素element = wb.find_element_by_css_selector('#s_radio input[checked="checked"]')print(element.get_attribute('value'))# 点选 小雷老师wb.find_element_by_css_selector('#s_radio input[value="小雷老师"]').click()

3.2 checkbox选择框

对checkbox进行选择,也是直接用 WebElement 的 click 方法,模拟用户点击选择

存在问题:

需要注意的是,要选中checkbox的一个选项,必须 先获取当前该复选框的状态 ,如果该选项已经勾选了,就不能再点击。否则反而会取消选择。

解决思路:

先把 已经选中的选项全部点击一下,确保都是未选状态

再点击 小雷老师

from selenium import webdriver# 启动浏览器wb = webdriver.Chrome(r'')# 隐式等待wb.implicitly_wait(3)# 搜索网页wb.get('http://cdn1.python3.vip/files/selenium/test2.html')# 定位已选元素elements = wb.find_elements_by_css_selector('#s_checkbox input[checked="checked"]')# 把已选元素,重新点击,还原成未选状态for element in elements:element.click()elements = wb.find_element_by_css_selector('#s_checkbox input[value="小江老师"]').click()

3.3 select 选择框

radio框及checkbox框都是input元素,只是里面的type不同而已。

对于Select 选择框, Selenium 专门提供了一个 Select类 进行操作。

根据选项的 value属性值 ,选择元素。

select_by_value

根据选项的 次序 (从0开始),选择元素

select_by_index

根据选项的 可见文本 ,选择元素。

select_by_visible_text

根据选项的value属性值, 去除 选中元素

deselect_by_value

根据选项的次序,去除 选中元素

deselect_by_index

根据选项的可见文本,去除 选中元素

deselect_by_visible_text

去除 选中所有元素

deselect_all

3.1 Select单选框

直接用Select方法选择即可。

from selenium import webdriverfrom selenium.webdriver.support.ui import Select# 启动浏览器wb = webdriver.Chrome(r'C:\Users\Lenono\Desktop\Test_Learning\chromedriver_win32\chromedriver.exe')# 隐式等待wb.implicitly_wait(3)# 搜索网站wb.get('http://cdn1.python3.vip/files/selenium/test2.html')# 创建Select类select = Select(wb.find_element_by_id('ss_single'))# 通过Select对象选中小江老师select.select_by_visible_text('小江老师')

3.2 Select多选框

对于select多选框,要选中某几个选项,要注意去掉原来已经选中的选项。

可以用select类 的deselect_all方法,清除所有 已经选中 的选项。

然后再通过 select_by_visible_text方法 选择 小雷老师 和 小凯老师。

from selenium import webdriverfrom selenium.webdriver.support.ui import Select# 启动浏览器wb = webdriver.Chrome(r'')# 隐式等待wb.implicitly_wait(3)# 搜索网站wb.get('http://cdn1.python3.vip/files/selenium/test2.html')# 创建Select类select = Select(wb.find_element_by_id('ss_multi'))# 去除所有的选项select.deselect_all()# 通过Select对象选中小江老师select.select_by_visible_text('小江老师')select.select_by_visible_text('小雷老师')

参考博客:/tut/auto/selenium/02/

参考视频:/video/BV1Z4411o7TA?p=9

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。