• Selenium API(二)


    1.定位一组元素

    WebDriver提供了8种定位一组元素的方法。

    1 driver.find_elements_by_css_selector()
    2 driver.find_elements_by_tag_name()
    3 driver.find_elements_by_class_name()
    4 driver.find_elements_by_xpath()
    5 driver.find_elements_by_id()
    6 driver.find_elements_by_link_text()
    7 driver.find_elements_by_name()
    8 driver.find_elements_by_partial_link_text()
     1 # -*- coding:utf-8 -*-
     2 from selenium import webdriver
     3 import os
     4 import time
     5 driver = webdriver.Firefox()
     6 file_path = "file:///" + os.path.abspath('testcheck.html')
     7 driver.get(file_path)
     8 inputs = driver.find_elements_by_tag_name("input")
     9 for input in inputs:
    10     if input.get_attribute("type") == "checkbox":
    11         input.click()
    12         time.sleep(1)
    13 driver.quit()

    2.多表单切换

    WebDriver只能在一个页面上对元素进行识别和定位,对于frame/iframe表单内嵌页面上的元素无法直接定位,因此WebDriver提供了方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

    switch_to.frame(),默认可以直接取表单的id或者name属性,如果iframe没有可用的id和name属性,可以通过下面的方式定位:

    1 ...
    2 # 先通过css定位到iframe
    3 iframe = driver.find_element_by_css_selector("[class='iframe']")
    4 # 再将定位对象传给switch_to.frame()方法
    5 driver.switch_to.frame(iframe)
    6 ...
    7 driver.switch_to.parent_frame()

    说明:当完成了当前iframe操作后,可以通过driver.switch_to.parent_frame()跳出当前一级表单,该方法默认对应于离他最近的switch_to.frame()方法,此外,在进入多级表单的情况下,还可以通过switch_to.default_content()跳会到最外层的页面。

     3.多页面切换

    WebDriver提供了switch_to.window()方法实现在不同的窗口之间切换。

     1 # -*- coding:utf-8 -*-
     2 from selenium import webdriver
     3 import os
     4 import time
     5 driver = webdriver.Firefox()
     6 driver.implicitly_wait(5)
     7 driver.get("http://www.baidu.com")
     8 # 获得百度搜索窗口句柄
     9 search_handle = driver.current_window_handle
    10 
    11 driver.find_element_by_link_text("登录").click()
    12 driver.find_element_by_link_text("立即注册").click()
    13 time.sleep(2)
    14 # 获取当前所有打开的窗口的句柄
    15 all_handles = driver.window_handles
    16 for handle in all_handles:
    17     if handle != search_handle:
    18         # 如果句柄不为搜索窗口的句柄,则切换到注册页面
    19         driver.switch_to.window(handle)
    20         print("now register window!")
    21         time.sleep(2)
    22 
    23 for handle in all_handles:
    24     if handle == search_handle:
    25         driver.switch_to.window(handle)
    26         driver.find_element_by_id("TANGRAM__PSP_4__closeBtn").click()
    27         driver.find_element_by_id("kw").send_keys("selenium")
    28         driver.find_element_by_id("su").click()
    29         time.sleep(2)
    30 
    31 
    32 
    33 driver.quit()

    4.警告框处理

    在WebDriver中通过使用switch_to_alert()方法定位到alert/confirm/prompt,然后使用text/accept/dismiss/send_keys等方法进行操作。

    text:返回alert/confirm/prompt中的文字信息。

    accept():接受现有警告框。

    dismiss():解散现有警告框。

    send_keys(keysToSend):发送文本到警告框。keysToSend:将文本发送至警告框。

    5.send_keys()实现文件上传

    1 # 定位上传按钮,然后添加本地文件
    2 driver.find_element_by_name("file").send_keys("f:\upload_file.txt")

    如果想要实现文件上传,只需要找到上传的input标签,基本伤可以同send_keys()方法将文件上传。

    6.文件下载

     1 # -*- coding:utf-8 -*-
     2 from selenium import webdriver
     3 import os
     4 import time
     5 firefox_profile = webdriver.FirefoxProfile()
     6 # 设置为0代表下载到浏览器默认下载路径,设置为2则表示可以保存到执行目录中
     7 firefox_profile.set_preference("browser.download.folderList", 2)
     8 # 是否显示开始,True为显示,False为不显示
     9 firefox_profile.set_preference("browser.download.manager.showWhenStarting", False)
    10 # 执行下载的目录,os.getcwd()返回当前目录
    11 firefox_profile.set_preference("browser.download.dir", os.getcwd())
    12 # 设置下载文件的类型
    13 firefox_profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/octet-stream")
    14 
    15 driver = webdriver.Firefox(firefox_profile=firefox_profile)
    16 driver.get("xxx")
    17 driver.find_element_by_name("xxx").click()
    18 driver.quit()

     7.操作Cookie

    WebDriver提供了操作Cookie的方法,可以读取,添加和删除cookie信息:

    • get_cookies():获得所有cookie信息。
    • get_cookie():返回字典的key为“name”的cookie信息。
    • add_cookie(cookie_dict):添加cookie。cookie_dict为字典对象,必须有name和value。
    • delete_cookie():删除cookie信息,需要指定name,即要删除的cookie的名称。
    • delete_all_cookies():删除所有的cookie信息。

    8.执行JavaScript

    WebDriver提供了execute_script()方法来执行JavaScript代码。

     1 # -*- coding:utf-8 -*-
     2 from selenium import webdriver
     3 import os
     4 import time
     5 
     6 driver = webdriver.Firefox()
     7 # 设置浏览器窗口大小
     8 driver.set_window_size(700, 500)
     9 driver.get("http://www.baidu.com")
    10 driver.find_element_by_id("kw").send_keys("selenium")
    11 driver.find_element_by_id("su").click()
    12 time.sleep(3)
    13 js = "window.scrollTo(100, 400)"
    14 # 执行js脚本,设置窗口到滚动条的位置
    15 driver.execute_script(js)
    16 time.sleep(3)
    17 driver.quit()

    9.窗口截图

    WebDriver提供了get_screenshot_as_file()来截取当前窗口。

     1 # -*- coding:utf-8 -*-
     2 from selenium import webdriver
     3 import os
     4 import time
     5 
     6 driver = webdriver.Firefox()
     7 
     8 driver.get("http://www.baidu.com")
     9 driver.find_element_by_id("kw").send_keys("selenium")
    10 driver.find_element_by_id("su").click()
    11 time.sleep(3)
    12 # 截取当前窗口,并制定截图保存的位置
    13 driver.get_screenshot_as_file("d:\test.jpg")
    14 driver.quit()

    10.关闭浏览器窗口

    WebDriver提供了quit()方法,其含义为退出相关的驱动程序和关闭所有窗口,另外提供了close()方法,用来关闭某一个窗口。

  • 相关阅读:
    eclipse里面已经提交的svn提交
    session 失效
    svn版本管理
    前端控制台调试经验
    python001环境搭建及入门 http://python.jobbole.com/81332/
    eclipse自己写makefile 建工程
    编码风格
    算法导论第22章22.2广度优先搜索
    vnc相关
    eclipse相关设置
  • 原文地址:https://www.cnblogs.com/zhuzhaoli/p/10457001.html
Copyright © 2020-2023  润新知