页面操作方法
1. 多frame(框架)切换
在Web应用中经常会遇到frame/iframe嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe内嵌页面上的元素无法直接定位,这时就通过switch_to.frame()方法将当前定位的主体切换为frame/iframe的内嵌页面中。
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('test_frame.html')
# 切换到frame(id="if")的框架
driver.switch_to.frame("if")
# 下面就可以正常的操作里面的元素了
driver.find_element_by_id("kw").send_keys("selenium")
# 如果没有id和name的情况
fr = driver.find_element_by_xpath('//*[@class="if"]')
driver.switch_to.frame(fr)
# 下面就可以正常的操作里面的元素了
driver.find_element_by_id("kw").send_keys("selenium")
switch_to.frame()可以直接取frame的id或name,如果没有id和name可以先通过xpath定位到iframe,再将定位对象传给switch_to.frame()方法。
如果完成了在当前frame上的操作,则可以通过switch_to.parent_content()方法跳出当前一级表单,该方法默认对应与离它最近的switch_to.frame()方法,除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳回最外层的页面。
2. 多窗口切换
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时候就需要主机切换到新打开的窗口上进行操作。
操作方法:
- 获得当前窗口的句柄
sreach_windows = driver.current_window_handle
- 获得当前所有打开的窗口句柄
all_handles=driver.window_handles
- 切换到相应的窗口
switch_to.window()
from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
# 获得当前窗口的句柄
sreach_windows = driver.current_window_handle
driver.find_element_by_link_text("地图")
# 获得当前所有打开的窗口句柄
all_handles=driver.window_handles
# 切换到地图窗口
for handle in all_handles:
if handle != sreach_windows:
driver.switch_to.window(handle)
操作元素.....
# 切换到原来窗口
or handle in all_handles:
if handle == sreach_windows:
driver.switch_to.window(handle)
3. 警告处理
在页面操作中有时会遇到JavaScript所生成的alert、confirm以及prompt弹框,可以使用switch_to_alert()方法定位到。然后使用text/accept/dismiss/send_keys等方法进行操作。
- switch_to_alert():获取当前页面上的警告框。
- text:返回alert/confirm/prompt 中的文字信息。
- accept():接受现有警告框。
- dismiss():解散现有警告框。
- send_keys(keysToSend):发送文本至警告框。keysToSend:将文本发送至警告框。
4. 操作Cookie
WebDriver操作cookie的方法
- get_cookies():获得所有cookie信息。
- get_cookie(name):添加字典的key为"name"的cookie的信息。
- add_cookie(cookie_dict):添加cookie。"cookie_dict'指字典对象,必须有name和value值。
- delete_cookie(name, optionsString):删除cookie信息。"name"是要删除的cookie的名称,
"optionsString"是该cookie的选项,目前支持的选项包括"路径","域"。 - delete_all_cookies():删除所有cookie信息。
5. 调用JavaScript代码
WebDriver提供了execute_script()方法来执行javaSrcipt代码。
js = "要执行的js代码"
driver.execute_script(js)
6. 窗口截图
WebDriver提供了截图函数get_screenshot_as_file()来截取当前窗口。
driver.get_screenshot_as_file("保存的路径')
7. 判断元素是否存在
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
def is_element_exist(css):
try:
driver.find_element_by_css_selector(css)
return True
except:
return False
print(is_element_exist('#kw'))
# 判断页面上有无id为kw的元素
if is_element_exist("#kw"):
driver.find_element_by_id("kw").send_keys("selenium")
# 判断页面有无标签为input元素
if is_element_exist("input"):
driver.find_element_by_tag_name("input").send_keys("selenium")
# 判断页面有无id为xxx的元素
if is_element_exist("xxx"):
driver.find_element_by_id("xxx").send_keys("selenium")
网友评论