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参数的值,则将该信息作为失败的错误信息返回。
序号断言方法断言描述
1assertEqual(arg1, arg2, msg=None)验证arg1=arg2,不等则fail
2assertNotEqual(arg1, arg2, msg=None)验证arg1 != arg2, 相等则fail
3assertTrue(expr, msg=None)验证expr是true,如果为false,则fail
4assertFalse(expr,msg=None)验证expr是false,如果为true,则fail
5assertIs(arg1, arg2, msg=None)验证arg1、arg2是同一个对象,不是则fail
6assertIsNot(arg1, arg2, msg=None)验证arg1、arg2不是同一个对象,是则fail
7assertIsNone(expr, msg=None)验证expr是None,不是则fail
8assertIsNotNone(expr, msg=None)验证expr不是None,是则fail
9assertIn(arg1, arg2, msg=None)验证arg1是arg2的子串,不是则fail
10assertNotIn(arg1, arg2, msg=None)验证arg1不是arg2的子串,是则fail
11assertIsInstance(obj, cls, msg=None)验证obj是cls的实例,不是则fail
12assertNotIsInstance(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 进行转换的安全性问题