zoukankan      html  css  js  c++  java
  • 【webdriver自动化】整理API框架(主要是关键字,具体例子在本地)

    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、    下载文件
  • 相关阅读:
    Android 基于Message的进程间通信 Messenger完全解析
    Android获取TextView显示的字符串宽度
    关于移动App的五个提问
    Android 结合实例学会AsyncTask的用法
    提高 Android 代码质量的4个工具
    高效开发Android App的10个建议
    移动5年 Android生态系统的演进
    最受欢迎的游戏引擎集结号:跨平台篇
    Java程序员转Android开发必读经验分享
    8 个最优秀的 Android Studio 插件
  • 原文地址:https://www.cnblogs.com/jingsheng99/p/9189259.html
Copyright © 2011-2022 走看看