Selenium 用法和实例

来源:互联网 发布:linux vi 模式切换 编辑:程序博客网 时间:2024/05/29 13:03

Usage_Selenium

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Date    : 2017-09-24 22:04:33# @Author  : kangvcar (kangvcar@126.com)# @Link    : http://www.github.com/kangvcar/# @Version : $Id$# from selenium import webdriver# from selenium.webdriver.common.keys import Keys## 模拟提交提交搜索的功能,首先等页面加载完成,然后输入到搜索框文本,点击提交# driver = webdriver.Firefox()# driver.get("http://www.python.org")# assert "Python" in driver.title# elem = driver.find_element_by_name("q")# elem.send_keys("pycon")# elem.send_keys(Keys.RETURN)# print driver.page_source# print '========================================================='# ## 测试用例# import unittest# from selenium import webdriver# from selenium.webdriver.common.keys import Keys# # 测试用例是继承了 unittest.TestCase 类,继承这个类表明这是一个测试类。# class PythonOrgSearch(unittest.TestCase):# """docstring for PythonOrgSearch"""# # setUp方法是初始化的方法,这个方法会在每个测试类中自动调用。# def setUp(self):# self.driver = webdriver.Firefox()# # 每一个测试方法命名都有规范,必须以 test 开头,会自动执行。# def test_search_in_python_org(self):# driver = self.driver# driver.get("http://www.python.org")# self.assertIn("Python", driver.title)# elem = driver.find_element_by_name("q")# elem.send_keys("pycon")# elem.send_keys(Keys.RETURN)# assert "No results found." not in driver.page_source# # tearDown 方法会在每一个测试方法结束之后调用。# #  close 方法相当于关闭了这个 TAB 选项卡,然而 quit 是退出了整个浏览器。# def tearDown(self):# self.driver.quit()# if __name__ == '__main__':# unittest.main()# print '========================================================='## 页面操作# # 我们可以这样获取它# element = driver.find_element_by_id("passwd-id")# element = driver.find_element_by_name("passwd")# element = driver.find_elements_by_tag_name("input")# element = driver.find_element_by_xpath("//input[@id='passwd-id']")# 获取了元素之后,下一步当然就是向文本输入内容了,可以利用下面的方法# element.send_keys("some text")# 同样你还可以利用 Keys 这个类来模拟点击某个按键。# element.send_keys("and some", Keys.ARROW_DOWN)# 用下面的方法来清除输入文本的内容。# element.clear()# print '========================================================='## 填充表单# 首先获取了第一个 select 元素,也就是下拉选项卡。然后轮流设置了 select 选项卡中的每一个 option 选项。# 你可以看到,这并不是一个非常有效的方法。# element = driver.find_element_by_xpath("//select[@name='name']")# all_options = element.find_element_by_tag_name("options")# for option in all_options:# print "Value is: %s" % option.get_attribute("value")# option.click()# 其实 WebDriver 中提供了一个叫 Select 的方法,可以帮助我们完成这些事情。# from selenium.webdriver.support.ui import Select# select = Select(driver.find_element_by_name('name'))#获取指定name的slelct# select.select_by_index(index)#根据索引来选择# select.select_by_visible_text("text")#根据文字来选择# select.select_by_value(value)#根据值来选择# 取消全部选择怎么办呢?很简单# select = Select(driver.find_element_by_id('id'))#获取指定id的slelct# select.deselect_all()#取消全部选择# 获取所有的已选选项# select = Select(driver.find_element_by_xpath("xpath"))#用xpath匹配select# all_selected_options = select.all_selected_options#.all_selected_options方法获取所有已选选项# 获取所有可选选项# options = select.options# 如果你把表单都填好了,最后肯定要提交表单对吧# driver.find_element_by_id("submit").click()# print '========================================================='##元素拖拽# 要完成元素的拖拽,首先你需要指定被拖动的元素和拖动目标元素,然后利用 ActionChains 类来实现。# source = driver.find_element_by_name("source")# target = driver.find_element_by_name("target")# from selenium.webdriver import ActionChains# action_chains = ActionChains(driver)# action_chains.drag_adn_drop(source, target).perform()# print '========================================================='## 页面切换# 一个浏览器肯定会有很多窗口,所以我们肯定要有方法来实现窗口的切换。切换窗口的方法如下#driver.switch_to_window("windowName")# 另外你可以使用 window_handles 方法来获取每个窗口的操作对象。例如#for handle in driver.window_handles:#driver.switch_to_window(handle)# 另外切换 frame 的方法如下,这样焦点会切换到一个 name 为 child 的 frame 上。#driver.switch_to_frame("frameName.0.child")# print '========================================================='## 弹窗处理## 获取弹窗对象# alert = driver.switch_to_alert()# print '========================================================='## 历史记录# 操作页面的前进和后退功能# driver.forward()# driver.back()# print '========================================================='## Cookies处理# 为页面添加 Cookies,用法如下# Go to the correct domain# driver.get("http://www.example.com")# Now set the cookie. This one's valid for the entire domain# cookie = {'name':'foo', 'value':'bar'}# driver.add_cookie(cookie)# 获取页面 Cookies,用法如下# Go to the correct domain# driver.get("http://www.example.com")# Add now output all the available cookie for the currect URL# driver.get_cookies()# print '========================================================='## 元素选取# #单个元素选取#多个元素选取# find_element_by_id# find_element_by_name find_elements_by_name# find_element_by_xpath find_elements_by_xpath# find_element_by_link_text find_elements_by_link_text# find_element_by_partial_link_text find_elements_by_partial_link_text# find_element_by_tag_name find_elements_by_tag_name# find_element_by_class_namefind_elements_by_tag_name# find_element_by_css_selector find_elements_by_css_selector#另外还可以利用 By 类来确定哪种选择方式# from selenium.webdriver.common.by import By# driver.find_element(By.XPATH, '//button[text()="Some text"]')# driver.find_elements(By.ID, 'dddd')## By 类的一些属性如下# ID = "id"# XPATH = "xpath"# LINK_TEXT = "link text"# PARTIAL_LINK_TEXT = "partial link text"# NAME = "name"# TAG_NAME = "tag name"# CLASS_NAME = "class name"# CSS_SELECTOR = "css selector"# print '========================================================='## 页面等待# Selenium 提供了两种等待方式,一种是隐式等待,一种是显式等待# 显式等待(显式等待指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了。)# from selenium import webdriver# from selenium.webdriver.common.by import By# from selenium.webdriver.support.ui import WebDriver# from selenium.webdriver.support import expected_conditions as EC# driver = webdriver.Firefox()# driver.get("http://somedomain/url_that_delays_loading")# try:# element = WebDriverWait(driver, 10).until(# EC.presence_of_element_located((By.ID, "someid"))# )# finally:# driver.quit()## 下面是一些内置的等待条件,你可以直接调用这些条件,而不用自己写某些等待条件了。# title_is# title_contains# presence_of_element_located# visibility_of_element_located# visibility_of# presence_of_all_elements_located# text_to_be_present_in_element# text_to_be_present_in_element_value# frame_to_be_available_and_switch_to_it# invisibility_of_element_located# element_to_be_clickable – it is Displayed and Enabled.# staleness_of# element_to_be_selected# element_located_to_be_selected# element_selection_state_to_be# element_located_selection_state_to_be# alert_is_present# 隐式等待(隐式等待比较简单,就是简单地设置一个等待时间,单位为秒)# from selenium import webdriver# driver = webdriver.Firefox()# driver = implicitly_wait(10)# driver.get("http://somedomain/url_that_delays_loading")# myDynamicElement = driver.find_element_by_id("myDynamicElement")