1、 获取网页源码 pageSource = self.driver.page_source print pageSource.encode("gbk","ignore") 2、 页面前进后退访问 firstVisitURL = "http://www.sogou.com" secondVisitURL = "http://www.baidu.com" # 首先访问sogou首页 self.driver.get(firstVisitURL) # 然后访问baidu首页 self.driver.get(secondVisitURL) # 返回上一次访问过的搜狗首页 self.driver.back() # 再次回到百度首页 self.driver.forward() 3、 强制刷新 Self.driver.refresh() 4、 最大化浏览器窗口 Self.driver.maximize_window() 5、 打印和设置浏览器窗口的横纵坐标 Self.driver.get_window_positon() #返回的是一个字典对象 Print position[“x”] Print position[“y”] Self.driver.set_window_position(x=200,y=300) 6、 截屏保存(截得是浏览器) Self.driver.screen_shot_as_file(r”e:\text4\1.png”) 截取整个屏幕 from PIL import ImageGrab img=ImageGrab.grab() img.save(“1.jpg”,”jpeg”) 7、 设置超时时间 Self.driver.set_page_load_timeout(4) 8、 获取当前浏览器页面的title值 Title=self.driver.title 或者 assert self.driver.title.find(u“百度一下,你就知道”)>=0,”assert error” 9、 获取当前句柄和切换句柄 获取当前句柄 Now_Handles=self.driver.current_window_handle 获取所有句柄 Handles=self.driver.window_handles 切换句柄 Self.driver.switch_to.window(handle) 10、 获得元素属性信息 Newelement=self.driver.find_element_by_xpath(“//*[text()=”新闻”]”) Print Newelement.tag_name Print Newelement.size 11、 断言链接元素是否包含某个文本 aElement = self.driver.find_element_by_xpath("//*[@class='mnav'][1]") a_text=a.Element.text self.assertEqual(a_text,u”新闻”) 12、 显示或隐藏某个元素 Print div4.is_displayed() 13、 判断元素是否可操作 Print input2.is_enabled() 14、 获取搜索框的“name”和“value”属性 searchBox = self.driver.find_element_by_id("query") print searchBox.get_attribute("name") print searchBox.get_attribute("value”) 15、 获取某个元素的css样式 searchBox = self.driver.find_element_by_id("kw") print searchBox.value_of_css_property(“height”) print searchBox.value_of_css_property(“width”) 16、 清空输入框 input = self.driver.find_element_by_id("kw") input.clear() 17、 向输入框中输入值 input = self.driver.find_element_by_id("kw") input.send_keys(u"光荣之路自动化测试") 18、 模拟鼠标单击 Button=self.driver.find_element_by_id(“button”) Button.click() 19、 模拟鼠标双击 inputBox = self.driver.find_element_by_id("inputBox") #导入支持鼠标双击操作的模块 From selenium import ActionChains Action_chains=ActionChains(self.driver) Action_chains.double_click(inputbox).perform() 20、 操作下拉列表 Select=self.driver.find_element_by_name(“fruit”) All_options=select.find_element_by_tag_name(“option”) For option in All_options: option.click() 21、 通过不同方法选中选项 # 导入Select模块 from selenium.webdriver.support.ui import Select select_element = Select(self.driver.find_element_by_xpath("//select")) # 方法一:通过序号选择第二个元素,序号从0开始 select_element.select_by_index(1) # 方法二:通过选项的显示文本选择文本为“猕猴桃”选项 select_element.select_by_visible_text("猕猴桃") # 方法三:通过选项的value属性值选择value=“shanzha”选项 select_element.select_by_value("shanzha") 22、 List存储内容然后做断言 from selenium.webdriver.support.ui import Select # 使用xpath定位方式获取select页面元素对象 select_element = Select(self.driver.find_element_by_xpath("//select")) # 获取所有选择项的页面元素对象 actual_options = select_element.options # 声明一个list对象,存储下拉列表中所期望出现的文字内容 expect_optionsList = [u"桃子",u"西瓜",u"橘子",u"猕猴桃",u"山楂",u"荔枝"] # 使用Python内置map()函数获取页面中下拉列表展示的选项内容组成的列表对象 actual_optionsList = map(lambda option: option.text, actual_options) # 断言期望列表对象和实际列表对象是否完全一致 self.assertListEqual(expect_optionsList, actual_optionsList) 23、 多选项的选中和取消选中 select_element = Select(self.driver.find_element_by_xpath("//select")) select_element.select_by_index(1) select_element.select_by_visible_text(“橘子”) select_element.select_by_value(“juzi”) select_element.deselect_by_index(1) select_element.deselect_by_visible_text(“橘子”) select_element.deselect_by_value(“juzi”) for select in select_element.all_selected_options: 24、 联想输入框,输入内容的同时模拟键盘按下箭头键 from selenium.webdriver.common.keys import Keys # 输入的同时按下箭头键 self.driver.find_element_by_id("select").send_keys("c") self.driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN) self.driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN) self.driver.find_element_by_id("select").send_keys( Keys.ENTER) 25、 单击radio berryRadio = self.driver.find_element_by_xpath("//input[@value='berry']") berryRadio.click() # 断言“草莓”复选框被成功选中 self.assertTrue(berryRadio.is_selected(), u"草莓复选框未被选中!") 26、 取消选中radio berryCheckBox = self.driver.find_element_by_xpath("//input[@value='berry']") berryCheckBox.click() # 断言“草莓”复选框被成功选中 self.assertTrue(berryCheckBox.is_selected(), u"草莓复选框未被选中!") if berryCheckBox.is_selected(): # 如果“草莓”复选框被成功选中,再次点击取消选中 berryCheckBox.click() 27、 通过断言页面是否存在某些关键字来确定页面按照预期加载 assert u"首页--光荣之路" in self.driver.page_source, u"页面源码中不存在该关键字" 28、 拖拽元素 # 导入提供拖拽元素方法的模块ActionChains from selenium.webdriver import ActionChains action_chains = ActionChains(self.driver) # 将页面上第一个能被拖拽的元素拖拽到第二个元素位置 action_chains.drag_and_drop(initialPosition, targetPosition).perform() # 将页面上第三个能拖拽的元素,向右下拖动10个像素,共拖动5次 for i in xrange(5): action_chains.drag_and_drop_by_offset(dragElement, 10, 10).perform() 29、 调用键盘事件 # 导入模拟按键模块Keys from selenium.webdriver.common.keys import Keys query = self.driver.find_element_by_id("query") query.send_keys(Keys.F12) query.send_keys("selenium") query.send_keys(Keys.ENTER) 30、 模拟鼠标右键 31、 调用系统剪切板模拟键盘组合键(ctrl+v) 例子太长见API整理txt 32、 键盘组合键(ctrl+a,ctrl+x,ctrl+v) 33、 键盘码 VK_CODE = { 'backspace': 0x08, 'tab': 0x09, 'clear': 0x0C, 'enter': 0x0D, 'shift': 0x10, 'ctrl': 0x11, 'alt': 0x12, 'pause': 0x13, 'caps_lock': 0x14, 'esc': 0x1B, 'spacebar': 0x20, 'page_up': 0x21, 'page_down': 0x22, 'end': 0x23, 'home': 0x24, 'left_arrow': 0x25, 'up_arrow': 0x26, 'right_arrow': 0x27, 'down_arrow': 0x28, 'select': 0x29, 'print': 0x2A, 'execute': 0x2B, 'print_screen': 0x2C, 'ins': 0x2D, 'del': 0x2E, 'help': 0x2F, '0': 0x30, '1': 0x31, '2': 0x32, '3': 0x33, '4': 0x34, '5': 0x35, '6': 0x36, '7': 0x37, '8': 0x38, '9': 0x39, 'a': 0x41, 'b': 0x42, 'c': 0x43, 'd': 0x44, 'e': 0x45, 'f': 0x46, 'g': 0x47, 'h': 0x48, 'i': 0x49, 'j': 0x4A, 'k': 0x4B, 'l': 0x4C, 'm': 0x4D, 'n': 0x4E, 'o': 0x4F, 'p': 0x50, 'q': 0x51, 'r': 0x52, 's': 0x53, 't': 0x54, 'u': 0x55, 'v': 0x56, 'w': 0x57, 'x': 0x58, 'y': 0x59, 'z': 0x5A, 'numpad_0': 0x60, 'numpad_1': 0x61, 'numpad_2': 0x62, 'numpad_3': 0x63, 'numpad_4': 0x64, 'numpad_5': 0x65, 'numpad_6': 0x66, 'numpad_7': 0x67, 'numpad_8': 0x68, 'numpad_9': 0x69, 'multiply_key': 0x6A, 'add_key': 0x6B, 'separator_key': 0x6C, 'subtract_key': 0x6D, 'decimal_key': 0x6E, 'divide_key': 0x6F, 'F1': 0x70, 'F2': 0x71, 'F3': 0x72, 'F4': 0x73, 'F5': 0x74, 'F6': 0x75, 'F7': 0x76, 'F8': 0x77, 'F9': 0x78, 'F10': 0x79, 'F11': 0x7A, 'F12': 0x7B, 'F13': 0x7C, 'F14': 0x7D, 'F15': 0x7E, 'F16': 0x7F, 'F17': 0x80, 'F18': 0x81, 'F19': 0x82, 'F20': 0x83, 'F21': 0x84, 'F22': 0x85, 'F23': 0x86, 'F24': 0x87, 'num_lock': 0x90, 'scroll_lock': 0x91, 'left_shift': 0xA0, 'right_shift ': 0xA1, 'left_control': 0xA2, 'right_control': 0xA3, 'left_menu': 0xA4, 'right_menu': 0xA5, 'browser_back': 0xA6, 'browser_forward': 0xA7, 'browser_refresh': 0xA8, 'browser_stop': 0xA9, 'browser_search': 0xAA, 'browser_favorites': 0xAB, 'browser_start_and_home': 0xAC, 'volume_mute': 0xAD, 'volume_Down': 0xAE, 'volume_up': 0xAF, 'next_track': 0xB0, 'previous_track': 0xB1, 'stop_media': 0xB2, 'play/pause_media': 0xB3, 'start_mail': 0xB4, 'select_media': 0xB5, 'start_application_1': 0xB6, 'start_application_2': 0xB7, 'attn_key': 0xF6, 'crsel_key': 0xF7, 'exsel_key': 0xF8, 'play_key': 0xFA, 'zoom_key': 0xFB, 'clear_key': 0xFE, '+': 0xBB, ',': 0xBC, '-': 0xBD, '.': 0xBE, '/': 0xBF, '`': 0xC0, ';': 0xBA, '[': 0xDB, '\': 0xDC, ']': 0xDD, "'": 0xDE, '`': 0xC0 } 34、 控制鼠标的右键操作 35、 在某一个元素上做悬浮 ActionChains(self.driver).move_to_element(link1).perform() 36、 查找页面中某个元素是否存在 方法: def isElementPresent(self, by, value): # 从selenium.common.exceptions模块导入NoSuchElementException异常类 from selenium.common.exceptions import NoSuchElementException try: element = self.driver.find_element(by=by, value=value) except NoSuchElementException, e: # 打印异常信息 print e # 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False return False else: # 没有发生异常,表示在页面中找到了该元素,返回True return True 调用: res = self.isElementPresent("id", "query") if res is True: print u"所查找的元素存在于页面上!" else: print u"页面中未找到所需要的页面元素!" 37、 隐式等待 #隐式等待指第一次找不到的话死等10s,注意这个是全局的;显示等待指每200毫秒尝试一次,找到马上结束,time.sleep()只是单纯的等待 self.driver.implicitly_wait(10) 38、 显式等待 wait = WebDriverWait(self.driver, 10, 0.2) wait.until(EC.title_is(u"你喜欢的水果")) 39、 刷新页面后元素报错的处理方式 #如果有页面刷新的机制时,一定要重新定位元素,否则会报错 40、 用title定位一个窗口 if self.driver.title == u"搜狗搜索引擎 - 上网从搜狗开始": self.driver.switch_to.window(all_handles[0]) 41、 用源码找到某个窗口 pageSource = self.driver.page_source if u"搜狗搜索" in pageSource: 42、 Frame间的切换 self.driver.switch_to.frame(XXX) self.driver.switch_to.default_content() (1) 通过标签名找到页面中所有的frame元素,然后通过索引进入该frame self.driver.switch_to.frame(self.driver.find_elements_by_tag_name("frame")[1]) (2) 通过id查找 self.driver.switch_to.frame("rightframe") self.driver.switch_to.frame(self.driver.find_element_by_id("rightframe")) (3) 通过索引序号查找 self.driver.switch_to.frame(0) (4) 通过xpath方式找到 self.driver.switch_to.frame(self.driver.find_element_by_xpath("//iframe")) 43、 用frame中的关键字做断言 self.driver.switch_to.frame(frame) # 判断每个frame的HTML源码中是否包含“中间 frame”几个关键词 if u"中间 frame" in self.driver.page_source: 44、 Confirm弹窗 button = self.driver.find_element_by_id("button") button.click() alert = self.driver.switch_to.alert time.sleep(2) # 使用alert.text属性获取confirm框中的内容, # 并断言文字内容是否是“这是一个 confirm 弹出框” self.assertAlmostEqual(alert.text, u"这是一个 confirm 弹出框") # 调用alert对象的accept()方法,模拟鼠标单击confirm弹窗上的“确定”按钮 # 以便关闭confirm窗 #alert.accept() # 取消下面一行代码的注释,就会模拟单击confirm框上的“取消”按钮 alert.dismiss() 45、 Alert弹窗 button = self.driver.find_element_by_id("button") button.click() # 使用driver.switch_to_alert()方法获取alert对象 alert = self.driver.switch_to.alert time.sleep(2) # 使用alert.text属性获取alert框中的内容, # 并断言文字内容是否是“这是一个 alert 弹出框” self.assertAlmostEqual(alert.text, u"这是一个 alert 弹出框") # 调用alert对象的accept()方法,模拟鼠标单击alert弹窗上的“确定”按钮 # 以便关闭alert窗 alert.accept() 46、 Prompt弹窗 element = self.driver.find_element_by_id("button") element.click() alert = self.driver.switch_to.alert self.assertEqual(u"这是一个 prompt 弹出框", alert.text) alert.send_keys(u"要想改变命运,必须每天学习2小时!") alert.accept() # alert.dismiss() 47、 Cookies 返回一个字典类型的数据 cookies = self.driver.get_cookies() for cookie in cookies: print "%s -> %s -> %s -> %s -> %s" % (cookie['domain'], cookie["name"], cookie["value"], cookie["expiry"], cookie["path"]) ck = self.driver.get_cookie("SUV") self.driver.delete_cookie("ABTEST") self.driver.delete_all_cookies() 48、 通过构造js语句,执行js语句来完成页面元素的搜索和点击 # 构造JavaScript查找百度首页的搜索输入框的代码字符串 searchInputBoxJS = "document.getElementById('query').value='光荣之路';" # 构造JavaScript查找百度首页的搜索按钮的代码字符串 searchButtonJS = "document.getElementById('stb').click()" # 通过JavaScript代码在百度首页搜索输入框中输入“光荣之路” self.driver.execute_script(searchInputBoxJS) time.sleep(2) # 通过JavaScript代码点击百度首页上的搜索按钮 self.driver.execute_script(searchButtonJS) 49、 纵轴滚动条 # 将页面的滚动条滑动到页面的最下方 self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") # 横轴滚动,document.body.scrollWidth/2,滚动横轴的一半坐标 self.driver.execute_script("document.getElementsByTagName('a')[500].scrollIntoView(true);") #for i in range(10,900): #driver.execute_script("document.getElementsByTagName('a')[%s].scrollIntoView(true);" %i) #("document.getElementById('choice').scrollIntoView(true);") # 将页面纵向向下滚动400像素 self.driver.execute_script("window.scrollBy (0,400);") 50、 选择悬浮窗中第几个联想词(webdriver方法) for i in range(3): # 选择悬浮框中中第几个联想关键词选项就循环几次 # 模拟键盘点击下箭头 searchBox.send_keys(Keys.DOWN) time.sleep(0.5) # 当按下箭头到想要选择的选项后,再模拟键盘点击回车键,选中该选项 searchBox.send_keys(Keys.ENTER) 51、 选择悬浮窗中第几个联想词(xpath序号方法) # 查找浮动框中的第三选项,只要更改li[3]中的索引数字, # 就可以实现任意单击选项浮动框中的选项。注意,索引从1开始 suggetion_option = self.driver.find_element_by_xpath("//*[@id='vl']/div[1]/ul/li[3]") # 点击找到的选项 suggetion_option.click() 52、 选择悬浮窗中第几个联想词(xpath关键词方法) # 查找内容包含“篮球电影”的悬浮选项 suggetion_option = self.driver.find_element_by_xpath("//ul/li[contains(., '电影')]") # 点击找到的选项 suggetion_option.click() 53、 结束浏览器进程 #使用场景:quit出现异常导致很多浏览器不能正常关闭;或需要在启动浏览器前先杀一遍# 导入Python的os包 import os # 结束Firefox浏览器进程 returnCode = os.system("taskkill /F /iM firefox.exe") if returnCode == 0: print u"成功结束Firefox浏览器进程!" else: print u"结束Firefox浏览器进程失败!" 54、 删除、新增页面元素属性 55、 下载文件