selenium 切换浏览器标签页
在实际操作中,会出现在多个窗口中进行切换的情况
1、获取句柄
a. 获取当前的handle名字
handle = driver.current_window_handle
print(f"获取到当前的handle:{handle}" )
b. 获取点击后新开页面的handle名字
driver.find_elements_by_class_name("dt-t")[0].click()
handle1 = driver.current_window_handle
print(f"获取到当前的handle:{handle1}" )
c. 获取全部的handle
handles = driver.window_handles
print(handles)
print(type(handles)) # 结果为list类型
2、切换句柄 (与列表的操作差不多)
切换到最后一个窗口
driver.switch_to.window(handles[-1])
3、判断是否切换成功:
a. 可根据title判断
print(driver.title)
b.可根据页面唯一元素判断
b. 新页面的元素操作完了,回到第一个页面
driver.close() # 关闭当前窗口
driver.switch_to_window(handle)
print(driver.title)
复数定位的时候,如果页面无刷新,可以直接用一次定位复数的list
** 页面有刷新的时候,需要重新定位**
4、关闭全部窗口,退出进程
driver.quit()
5、 代码片段
# 获取之前窗口
handle = driver.current_window_handle
print(f"第一个窗口:{handle}")
# 打印窗口标题 driver.title
print(driver.title)
# 点击按钮进入后台登录页面
driver.find_element_by_link_text("后台管理").click()
sleep(2)
# 已切换窗口
handle1 = driver.current_window_handle
print(f"获取到当前的handle:{handle1}")
# 获取全部的handle
handles = driver.window_handles
print(handles)
print(type(handles)) # 结果为list类型
# 切换到最后一个窗口
driver.switch_to.window(handles[-1])
handle2 = driver.current_window_handle
print(f"获取到当前的handle:{handle2}")
print(driver.title)
Python断言方法:
基本的断言方法提供了测试结果是True还是False。所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。
序号 | 断言方法 | 断言描述 |
---|---|---|
1 | assertEqual(arg1, arg2, msg=None) | 验证arg1=arg2,不等则fail |
2 | assertNotEqual(arg1, arg2, msg=None) | 验证arg1 != arg2, 相等则fail |
3 | assertTrue(expr, msg=None) | 验证expr是true,如果为false,则fail |
4 | assertFalse(expr,msg=None) | 验证expr是false,如果为true,则fail |
5 | assertIs(arg1, arg2, msg=None) | 验证arg1、arg2是同一个对象,不是则fail |
6 | assertIsNot(arg1, arg2, msg=None) | 验证arg1、arg2不是同一个对象,是则fail |
7 | assertIsNone(expr, msg=None) | 验证expr是None,不是则fail |
8 | assertIsNotNone(expr, msg=None) | 验证expr不是None,是则fail |
9 | assertIn(arg1, arg2, msg=None) | 验证arg1是arg2的子串,不是则fail |
10 | assertNotIn(arg1, arg2, msg=None) | 验证arg1不是arg2的子串,是则fail |
11 | assertIsInstance(obj, cls, msg=None) | 验证obj是cls的实例,不是则fail |
12 | assertNotIsInstance(obj, cls, msg=None) | 验证obj不是cls的实例,是则fail |
字符串转为字典
方式一: eval()
自己经常用,主要是简单,但是会有安全问题。
方式二: json.loads()/demjson.encode()
缺点1: 转换成的数据type 是unicode, 需要再进行转换成type=dict
缺点2: json语法规定,数组或对象之中的字符串必须使用双引号,不能使用单引号,所以使用起来不灵活,不能保证所有的Str都能够正常转换。
方式三:literal_eval() 【推荐】
使用方式如下:
import ast
map = '{"city" : "上海", "id" : "101"}'
map_d = ast.literal_eval(map)
print(map_d)
print(type(map_d))
打印的结果:
{'city': '上海', 'id': 101}
<type 'dict'>
优点:既不存在使用 json 进行转换的问题,也不存在使用 eval 进行转换的安全性问题