Selenium2+Python:Webdriver API速记手册
由于web自动化常常需要控制浏览器行为和操作页面元素,相关函数又比较多,于是再此记下一份Webdriver API查阅文档以备不时之需。
参考:虫师《Selenium2自动化测试实战》,和http://selenium-python.readthedocs.io/api.html
1 #coding=utf-8 2 from selenium import webdriver 3 driver=webdriver.Firefox() 4 driver.get('http://www.baidu.com/') 5 print 'driver attributes:' 6 print dir(driver) 7 Elem=driver.find_element_by_id('kw') 8 print 'WebElement attributes:' 9 print dir(Elem)
输出结果:
driver attributes: ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_file_detector'
, '_is_remote', '_mobile', '_switch_to', '_unwrap_value', '_wrap_value', 'add_cookie', 'application_cache', 'back', 'capabilities',
'close', 'command_executor', 'create_options', 'create_web_element', 'current_url', 'current_window_handle', 'delete_all_cookies',
'delete_cookie', 'desired_capabilities', 'error_handler', 'execute', 'execute_async_script', 'execute_script', 'file_detector',
'file_detector_context', 'find_element', 'find_element_by_class_name', 'find_element_by_css_selector', 'find_element_by_id',
'find_element_by_link_text', 'find_element_by_name', 'find_element_by_partial_link_text', 'find_element_by_tag_name',
'find_element_by_xpath', 'find_elements', 'find_elements_by_class_name', 'find_elements_by_css_selector', 'find_elements_by_id',
'find_elements_by_link_text', 'find_elements_by_name', 'find_elements_by_partial_link_text', 'find_elements_by_tag_name',
'find_elements_by_xpath', 'forward', 'get', 'get_cookie', 'get_cookies', 'get_log', 'get_screenshot_as_base64',
'get_screenshot_as_file', 'get_screenshot_as_png', 'get_window_position', 'get_window_size', 'implicitly_wait', 'launch_app',
'log_types', 'maximize_window', 'mobile', 'name', 'orientation', 'page_source', 'quit', 'refresh', 'save_screenshot', 'service',
'session_id', 'set_page_load_timeout', 'set_script_timeout', 'set_window_position', 'set_window_size', 'start_client', 'start_session',
'stop_client', 'switch_to', 'switch_to_active_element', 'switch_to_alert', 'switch_to_default_content', 'switch_to_frame',
'switch_to_window', 'title', 'w3c', 'window_handles']
调用语法:driver.属性名(注:Some attributes are callable (or methods) and others are non-callable (properties),以下列出的均为方法属性)
常用属性:
1 driver.find_element_by_id(id_) #查找元素的id 2 driver.find_element_by_name(name) #查找元素的name 3 driver.find_element_by_link_text(link_text) #查找元素的链接文本 4 driver.find_element_by_partial_link_text(link_text) #查找元素的链接的部分文本 5 driver.find_element_by_tag_name(name) #查找元素的标签名 6 driver.find_element_by_xpath(xpath) #查找元素的xpath 7 driver.find_elements_by_xpath(xpath) #查找元素内的子元素的xpath 8 driver.find_element_by_class_name(name) #查找一个元素的类名 9 driver.find_elements_by_class_name(name) #查找元素的类名 10 driver.find_element_by_css_selector(css_selector) #查找并返回一个元素的CSS 选择器 11 driver.find_elements_by_css_selector(css_selector) #查找并返回多个元素的CSS 选择器列表
1 driver.get(url) #浏览器加载url。 2 driver.forward() #浏览器向前(点击向前按钮) 3 driver.back() #浏览器向后(点击向后按钮) 4 driver.refresh() #浏览器刷新(点击刷新按钮) 5 driver.close() #关闭当前窗口,或最后打开的窗口。 6 driver.quit() #关闭所有关联窗口,并且安全关闭session 7 driver.maximize_window() #最大化浏览器窗口 8 driver.set_window_size(宽,高) #设置浏览器窗口大小 9 driver.get_window_size() #获取当前窗口大小 10 driver.switch_to_window(窗口句柄) #切换到新窗口 11 driver.switch_to_frame(id或name属性值) #切换到新表单(同一窗口)。若无id或属性值,可先通过xpath定位到iframe,再将值传给switch_to_frame()
1 driver.get_screenshot_as_file(filename) #窗口截图 2 driver.switch_to_alert() #警告框处理。处理JavaScript所生成的alert,confirm,prompt. 3 driver.implicitly_wait(秒) #隐式等待,通过一定的时长等待页面上某一元素加载完成。若提前定位到元素,则继续执行。若超过时间未加载出,则抛出NoSuchElementException异常 4 driver.execute_script(js) #调用js 5 driver.get_cookies() #获取当前会话所有cookie信息。 6 driver.get_cookie(cookie_name) #返回字典的key为“cookie_name”的cookie信息。 7 driver.add_cookie(cookie_dict) #添加cookie。“cookie_dict”指字典对象,必须有name和value值。 8 driver.delete_cookie(name,optionsString) #删除cookie信息。 9 driver.delete_all_cookies() #删除所有cookie信息
输出结果:
WebElement attributes: ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__',
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'__weakref__', '_execute', '_id', '_parent', '_upload', '_w3c', 'clear', 'click', 'find_element', 'find_element_by_class_name',
'find_element_by_css_selector', 'find_element_by_id', 'find_element_by_link_text', 'find_element_by_name',
'find_element_by_partial_link_text', 'find_element_by_tag_name', 'find_element_by_xpath', 'find_elements',
'find_elements_by_class_name', 'find_elements_by_css_selector', 'find_elements_by_id', 'find_elements_by_link_text',
'find_elements_by_name', 'find_elements_by_partial_link_text', 'find_elements_by_tag_name', 'find_elements_by_xpath',
'get_attribute', 'id', 'is_displayed', 'is_enabled', 'is_selected', 'location', 'location_once_scrolled_into_view', 'parent', 'rect',
'screenshot', 'screenshot_as_base64', 'screenshot_as_png', 'send_keys', 'size', 'submit', 'tag_name', 'text', 'value_of_css_property']
调用语法:driver.find_element*.属性名(注:Some attributes are callable (or methods) and others are non-callable (properties),以下列出的均为方法属性)
常用属性:
1 driver.find_element_by_*().clear() #清除文本 2 driver.find_element_by_*().send_keys(value) #模拟键盘输入 3 driver.find_element_by_*().click() #单击元素,可以作用于按钮、链接、复选框、单选框、下拉框 4 driver.find_element_by_*().submit() #用于表单提交,应用范围不及click()广泛 5 driver.find_element_by_*().get_attribute(name) #获得属性值 6 driver.find_element_by_*().is_displayed() #返回元素结果是否可见(True 或 False) 7 driver.find_element_by_*().is_selected() #返回元素结果是否被选中(True 或 False) 8 driver.find_element_by_*().find_element_by_*() #定位元素,用于二次定位
补充:鼠标事件:perform()对所有鼠标事件进行存储,或者说是对所以操作都进行了提交
#定位到要右击的元素 element =driver.find_element_by_xpath("/html/body/div/div[2]/div[2]/div/div[3]/table/tbody/tr/td[2]") #对定位到的元素执行鼠标右键操作 ActionChains(driver).context_click(qqq).perform() #定位到要双击的元素 element =driver.find_element_by_id("submit") ActionChains(driver).double_click(qqq).perform() #定位元素的原位置 element = driver.find_element_by_name("source") #定位元素要移动到的目标位置 target = driver.find_element_by_name("target") ActionChains(driver).drag_and_drop(element, target).perform() #定位鼠标悬停的元素 element = self.find_element(*locator) ActionChains(self.driver).move_to_element(element).perform()