selenium 全天课整理(二)
# encoding=utf-8
'''
selenium 全天 二 ''' #unittest例子 from selenium import webdriver
import unittest,time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains class VisitSogouBaiduByChrome(unittest.TestCase): def setUp(self):
self.driver = webdriver.Chrome(executable_path='f:\\chromedriver')
self.url1= 'https://www.baidu.com'
self.url2 = 'https://cn.bing.com'
self.wwait=WebDriverWait(self.driver,10,0.4) def test_visit_baidu(self):
self.driver.get(self.url1)
print('当前网页为:', self.driver.current_url)
self.wwait.until(lambda x:x.find_element_by_id('kw')).send_keys('我是谁')
self.wwait.until(lambda x:x.find_element_by_id('su')).click()
time.sleep(3) assert '成龙' in self.driver.page_source def test_visit_bing(self):
self.driver.get(self.url2)
print('当前网页为:', self.driver.current_url)
self.wwait.until(lambda x:x.find_element_by_id('sb_form_q')).send_keys('猫鼠游戏')
self.wwait.until(lambda x:x.find_element_by_id('sb_form_go')).click()
time.sleep(3) assert '莱昂纳多' in self.driver.page_source def tearDown(self):
self.driver.quit() if __name__=='__main__':
unittest.main() '''
#执行的顺序:
set_up #每个test的初始化
test_visitsogou #方法名称必须test开头
teardown
set_up
test_visitbaidu
teardown #每个test的结束执行
''' ************************selenium API 基本操作 ************************* #页面后退、前进 driver.back()
driver.forward() #页面刷新
driver.refresh() #强制刷新 不使用浏览器的缓存 #页面最大化
driver.maximize_window() #获取、设置窗口的坐标 左上角 0,0 往右+100 往下+200
driver.get_window_position() #设置窗口大小self.driver.get_window_size()、self.driver.set_window_size()
driver.get_window_size()
driver.set_window_size(width = 200, height = 400, windowHandle='current')
driver.get_window_size(windowHandle='current') #窗口的名称
driver.title #获取到网页的源码,比http协议requests获取的源码全,js都可以执行后获取
driver.page_source #获取当前页面的url
driver.current_url ********************************切换不同窗口 window_handles,driver.switch_to.window(now_handle)******************** import unittest
import time
import chardet
from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self):
# 启动IE浏览器
self.driver = webdriver.Chrome(executable_path="f:\\chromedriver") def test_operateWindowHandle(self):
url = "https://www.baidu.com"
self.driver.get(url) # 获取当前窗口句柄
now_handle = self.driver.current_window_handle # 百度搜索输入框中输入“w3cschool”
self.driver.find_element_by_id("kw").send_keys("w3cschool")
# 点击搜索按钮
self.driver.find_element_by_id("su").click()
time.sleep(3) # 点击w3school在线教育链接
self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click()
time.sleep(5)
print("++++", self.driver.window_handles) # 循环遍历所有新打开的窗口句柄,也就是说不包括主窗口
for handle in self.driver.window_handles:
if handle != now_handle:
# 切换窗口
self.driver.switch_to.window(handle) #切换窗口,也可以用下面的方法,但此种方法在selenium3.x以后官方已经不推荐使用了self.driver.switch_to_window(handle)
# 点击HTML5链接
self.driver.find_element_by_link_text('HTML5').click()
time.sleep(3)
# 关闭当前的窗口
self.driver.close() # 不能用self.driver.quit() 否则整个浏览器会退出
time.sleep(3)
# 返回主窗口
self.driver.switch_to.window(now_handle) time.sleep(2)
self.driver.find_element_by_id("kw").clear()
self.driver.find_element_by_id("kw").send_keys(u"光荣之路自动化测试培训")
self.driver.find_element_by_id("su").click()
time.sleep(5) def tearDown(self):
# 退出浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main() **********************************另一种方式切换不同的窗口,window_handles,判断driver.title==""********************** import unittest
import time
from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self):
# 启动chrome浏览器
self.driver = webdriver.Chrome(executable_path="f:\\chromedriver") def test_operateWindowHandle(self):
url = "http://www.baidu.com"
self.driver.get(url)
# 获取当前窗口句柄
now_handle = self.driver.current_window_handle # 百度搜索输入框中输入“w3cschool”
self.driver.find_element_by_id("kw").send_keys("w3cschool")
# 点击搜索按钮
self.driver.find_element_by_id("su").click()
time.sleep(3)
# 点击w3school在线教育链接
self.driver.find_element_by_xpath("//*[@id='2']/h3/a").click() time.sleep(5)
# 获取所有窗口句柄
all_handles = self.driver.window_handles
# 循环遍历所有新打开的窗口句柄,也就是说不包括主窗口
for handle in all_handles:
self.driver.switch_to.window(handle) if self.driver.title == "w3school 在线教程":
# 点击HTML5链接
self.driver.find_element_by_link_text('HTML5').click()
time.sleep(3)
if self.driver.title == "w3cschool_百度搜索":
time.sleep(2)
self.driver.find_element_by_id("kw").clear()
self.driver.find_element_by_id("kw").send_keys("我是谁")
self.driver.find_element_by_id("su").click()
time.sleep(5) def tearDown(self):
# 退出IE浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main() ******************************组合按键keyDown(keyName)、keyUp(keyName)********************* import win32api
import win32con
import time VK_CODE ={
'enter':0x0D,
'ctrl':0x11,
'a':0x41,
'v':0x56,
'x':0x58,
't':0x54
} #键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
#键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0) #(方法1)浏览器新开一个窗口 ctrl+t
keyDown('ctrl')
keyDown('t')
keyUp('t')
keyUp('ctrl') #(方法2) 浏览器新开一个窗口
open_window='window.open("http://www.baidu.com");' #新开一个空白窗口 open_window='window.open();'
driver.execute_script(open_window) #获取元素的属性
news_element=driver.find_element_by_xpath("//*[text()='新闻']")
print("元素的标签名:", newsElement.tag_name)
print("元素的size:", newsElement.size)
print("元素的文本:",newsElement.text)
print("元素的链接:",newsElement.get_attribute("href"))
print("元素的链接:", newsElement.get_property("href")) #判断元素是否可见 div2.is_displayed() #判断元素是否可操作,及通过 js 修改元素可操作 input1.is_enabled()
driver.execute_script("document.getElementById('input2').disabled=false;") #获取页面文本框输入的内容
input_box=driver.find_element_by_id("kw")
input_box.send_keys("w3cschool")
print(input_box.get_attribute('value')) #获取页面元素的css的属性值 searchBox =driver.find_element_by_id("kw")
# 使用页面元素对象的value_of_css_property()方法获取元素的CSS属性值
print (u"搜索输入框的高度是:", searchBox.value_of_css_property("height"))
print (u"搜索输入框的宽度是:", searchBox.value_of_css_property("width"))
font = searchBox.value_of_css_property("font-family")
print (u"搜索输入框的字体是:", font)
# 断言搜索输入框的字体是否是arial字体
assert font=="arial" #文本框清空 input_box.clear() #页面元素双击 from selenium.webdriver import ActionChains
ActionChains(driver).double_click(inputBox).perform() #操作下拉框(普通方式) select = self.driver.find_element_by_name("fruit")
all_options = select.find_elements_by_tag_name("option") #注意这个返回列表
for option in all_options:
print (u"选项显示的文本:", option.text)
print (u"选项值为:", option.get_attribute("value"))
option.click() *************************Select方式操作下拉框************************* from selenium.webdriver.support.ui import Select select_element = Select(self.driver.find_element_by_xpath("//select"))
# 打印默认选中项的文本
print (select_element.first_selected_option.text)
#下拉框的所有选项
all_options = select_element.options #下拉框已选择的所有选项
select_element.all_selected_options #选择选项的三种方式
#通过序号
select_element.select_by_index(1)
#通过选项的显示文本
select_element.select_by_visible_text("猕猴桃")
#通过选项的value属性值
select_element.select_by_value("shanzha") #多选框的操作同上面下拉框 # 取消所有已选中项
select_element.deselect_all() select_element.select_by_index(1)
select_element.select_by_visible_text("荔枝")
select_element.select_by_value("juzi") # 通过选项文本取消已选中的文本为“荔枝”选项
select_element.deselect_by_visible_text("荔枝")
# 通过序号取消已选中的序号为1的选项
select_element.deselect_by_index(1)
# 通过选项的value属性值取消已选中的value=“juzi”的选项
select_element.deselect_by_value("juzi") #可以输入内容筛选的下拉框,选择提示的下拉内容,只支持IE
from selenium.webdriver.common.keys import Keys driver.find_element_by_id("select").send_keys("c") #根据输入,下拉框提示筛选结果
driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN) #按向下键 选择结果
driver.find_element_by_id("select").send_keys( Keys.ARROW_DOWN)
driver.find_element_by_id("select").send_keys( Keys.ENTER) #单选框的操作,直接通过xpath定位,然后click() berryRadio = driver.find_element_by_xpath("//input[@value='berry']")
# 点击选择“草莓”选项
berryRadio.click() #复选框操作,直接通过xpath定位,然后click()选中,再次click()取消选择 berryCheckBox = self.driver.find_element_by_xpath("//input[@value='berry']")
# 点击选择“草莓”选项
berryCheckBox.click() #断言,assert
assert "首页" in driver.page_source, "页面源码中不存在该关键字!" #如果断言失败,提示的错误信息 *****************************浏览器内部,截屏get_screen_shot_as_file(filepath)*********************** result = driver.get_screenshot_as_file(r"e:\screenPicture.png")
print (result) #成功返回True #截图 不只是浏览器 屏幕都可以截图,不能滚屏 from PIL import ImageGrab
im=ImageGrab.grab()
im.save("e:\\1.jpg","jpeg") #创建当前日期(年月日)的目录,然后截图(时分秒.png)存到目录 import os
import os.path
import time
from selenium import webdriver
urls=["http://www.baidu.com","http://www.sogou.com","http://cn.bing.com"] dir_name=time.strftime("%Y-%m-%d",time.localtime())
if not os.path.exists("e:\\"+dir_name):
os.mkdir("e:\\"+dir_name)
driver = webdriver.Ie(executable_path = "f:\\IEDriverServer")
os.chdir("e:\\"+dir_name)
for url in urls:
driver.get(url)
driver.get_screenshot_as_file(time.strftime("%H-%M-%S",time.localtime())+".png") ************************************页面元素拖拽***************************** import unittest
import time
import chardet
from selenium import webdriver class VisitSogouByIE(unittest.TestCase): def setUp(self):
#启动IE浏览器
#self.driver = webdriver.Firefox(executable_path = "e:\\geckodriver")
#self.driver = webdriver.Ie(executable_path = "f:\\IEDriverServer")
self.driver = webdriver.Chrome(executable_path = "f:\\chromedriver") def test_dragPageElement(self):
url = "http://jqueryui.com/resources/demos/draggable/scroll.html"
# 访问被测试网页
self.driver.get(url)
# 获取页面上第一个能拖拽的页面元素
initialPosition = self.driver.find_element_by_id("draggable")
# 获取页面上第二个能拖拽的页面元素
targetPosition = self.driver.find_element_by_id("draggable2")
# 获取页面上第三个能拖拽的页面元素
dragElement = self.driver.find_element_by_id("draggable3")
# 导入提供拖拽元素方法的模块ActionChains
from selenium.webdriver import ActionChains
import time
"""
创建一个新的ActionChains,将webdriver实例对象driver作为参数值传入
然后通过WebDriver实例执行用户动作。
"""
action_chains = ActionChains(self.driver)
# 将页面上第一个能被拖拽的元素拖拽到第二个元素位置
action_chains.drag_and_drop(initialPosition, targetPosition).perform()
# 将页面上第三个能拖拽的元素,向右下拖动10个像素,共拖动5次
for i in range(5):
action_chains.drag_and_drop_by_offset(dragElement, 10, 10).perform()
time.sleep(2) def tearDown(self):
# 退出IE浏览器
self.driver.quit() if __name__ == '__main__':
unittest.main() ********************************页面的键盘事件 send_keys(Keys.ENTER)************************* from selenium.webdriver.common.keys import Keys
input_box.send_keys(Keys.F12) #IE浏览器打开调试模式
input_box.send_keys("selenium")
#点击回车键
# 或者使用query.send_keys(Keys.RETURN)
query.send_keys(Keys.ENTER) **********************键盘事件 的例子************************ import unittest
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
import win32clipboard as w
import win32con
import time
import win32api # 读取剪切板
def getText():
w.OpenClipboard()
d = w.GetClipboardData(win32con.CF_TEXT)
w.CloseClipboard()
return d # 设置剪切板内容
def setText(aString):
w.OpenClipboard()
w.EmptyClipboard()
w.SetClipboardData(win32con.CF_UNICODETEXT, aString)
w.CloseClipboard() VK_CODE ={
'enter':0x0D,
'ctrl':0x11,
'a':0x41,
'v':0x56,
'x':0x58
} #键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0) #键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0) content = '我是谁'
# 将content变量中的内容设置到剪切板中
setText(content)
# 从剪切板中获取刚设置到剪切板中的内容
getContent = getText()
print ("剪切板中的内容:",getContent.decode("gbk")) #注意需要转换字符串类型 # 将焦点切换到搜索输入框中
driver.find_element_by_id("kw").click() keyDown('ctrl')
keyDown('v')
# 释放Ctrl + v组合键
keyUp('v')
keyUp('ctrl')
# 点击“百度一下”搜索按钮
self.driver.find_element_by_id('su').click() ********************** ActionChains 执行ctrl+a ctrl+x ctrl+v**************************** import unittest
import time
import chardet
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys ActionChains(driver).key_down(Keys.CONTROL).send_keys('a').key_up(Keys.CONTROL).perform() #ctrl+a
ActionChains(driver).key_down(Keys.CONTROL).send_keys('x').key_up(Keys.CONTROL).perform() #ctrl+x driver.get(url)
driver.find_element_by_id("kw").click()
# 模拟Ctrl + V组合键,将从剪切板中获取到的内容粘贴到搜索输入框中
ActionChains(driver).key_down(Keys.CONTROL).send_keys('v').key_up(Keys.CONTROL).perform() #ctrl+v
# 点击“百度一下”搜索按钮
self.driver.find_element_by_id('su').click() **********************************利用win32的方式 实现上述例子************************* import unittest
import time
import chardet
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
# 导入模拟组合按键需要的包
import win32api
import win32con
import time VK_CODE ={
'enter':0x0D,
'ctrl':0x11,
'a':0x41,
'v':0x56,
'x':0x58,
't':0x54
} #键盘键按下
def keyDown(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, 0, 0)
#键盘键抬起
def keyUp(keyName):
win32api.keybd_event(VK_CODE[keyName], 0, win32con.KEYEVENTF_KEYUP, 0) # 模拟Ctrl + a,选中输入框中所有的内容
keyDown('ctrl')
keyDown('a')
# 释放Ctrl + a组合键
keyUp('a')
keyUp('ctrl')
# 模拟Ctrl + x剪切所选中的内容
keyDown('ctrl')
keyDown('x')
keyUp('x')
keyUp('ctrl')
# 访问百度首页
self.driver.get("http://www.baidu.com")
# 将焦点切换到搜索输入框中
self.driver.find_element_by_id("kw").click()
# 模拟Ctrl + v组合键,进行粘贴
keyDown("ctrl")
keyDown("v")
keyUp('v')
keyUp('ctrl')
# 模拟回车键
keyDown('enter')
keyUp('enter') ******************************************键盘所有按键的清单*********************************** 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,
'': 0x30,
'': 0x31,
'': 0x32,
'': 0x33,
'': 0x34,
'': 0x35,
'': 0x36,
'': 0x37,
'': 0x38,
'': 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
}
selenium 全天课整理(二)的更多相关文章
- NeHe OpenGL教程 第十八课:二次几何体
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 树和堆(julyedu网课整理)
date: 2018-12-05 16:59:15 updated: 2018-12-05 16:59:15 树和堆(julyedu网课整理) 1 定义 1.1 树的定义 它是由n(n>=1)个 ...
- 单元测试系列之十:Sonar 常用代码规则整理(二)
摘要:帮助公司部署了一套sonar平台,经过一段时间运行,发现有一些问题出现频率很高,因此有必要将这些问题进行整理总结和分析,避免再次出现类似问题. 作者原创技术文章,转载请注明出处 ======== ...
- selenium webdriver学习(二)————对浏览器的简单操作(转载JARVI)
selenium webdriver学习(二)————对浏览器的简单操作 博客分类: Selenium-webdriver selenium webdriver对浏览器的简单操作 打开一个测试浏览 ...
- selenium定位方法(二)
selenium定位方法(二) 1.xpath定位:xpath是在XML中查找节点所在的路径的表达式 1)绝对路径的Xpath表达式 例:/html/body/div/div[1]/ul//li[3 ...
- 栈&队列&并查集&哈希表(julyedu网课整理)
date: 2018-11-25 08:31:30 updated: 2018-11-25 08:31:30 栈&队列&并查集&哈希表(julyedu网课整理) 栈和队列 1. ...
- 算法初步(julyedu网课整理)
date: 2018-11-19 13:41:29 updated: 2018-11-19 14:31:04 算法初步(julyedu网课整理) 1 O(1) 基本运算 O(logn) 二分查找 分治 ...
- selenium第一课(selenium+java+testNG+maven)
selenium介绍和环境搭建 一.简单介绍 1.selenium:Selenium是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包 ...
- Selenium使用方法整理
我采用的是Python来使用selenium库,同时java也可以使用,但不如python操作起来方便.下文都会以python的操作为例子,整理我学习selenium过程中收集到的方法. 一:安装 首 ...
随机推荐
- Postman系列四:Postman接口请求设置环境变量和全局变量、测试沙箱和测试断言、测试集运行与导入数据文件
一:Postman中接口请求设置环境变量和全局变量 全局变量和环境变量可以通过Pre-request Script和Tests设置,会在下面测试沙箱和测试断言中讲到. 全局变量的设置:官网参考http ...
- 【LeetCode】下一个排列【找规律】
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常数空间. ...
- MapReduce面试题
什么是mapreduce Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架.容错高,扩展好,适合pB数据处理 MapReduce 执行过程分析 ...
- Linux系统下Dubbo安装的详细教程
Linux系统下Dubbo安装的详细教程 1.Dubbo的简介 Dubbo是 [1] 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [ ...
- C++容器简介1—stack
一.简介 stack是一种容器适配器(STL的容器分为顺序容器和关联容器,容器适配器),被设计来用于操作先进后出(FILO)结构的情景,在这种情况下, 元素的插入和删除都只能在容器的尾部进行. sta ...
- python3的 基础
]print(list(set(lst))) # 面试题: # a = 10 # b = 20 # a,b = b,a # 10000% # print(b) # 10 # print(a ...
- array_merge_recursive 的使用
作用:递归合并数组 场景:在平时开发中,我们可能遇到获取的数据是多个维度的数据,而我们只需要其中的一个. 代码如下: $project_id = 'project_id'; $arr1 = [ 'pr ...
- Vue.js 2.x render 渲染函数 & JSX
Vue.js 2.x render 渲染函数 & JSX Vue绝大多数情况下使用template创建 HTML.但是比如一些重复性比较高的场景,需要运用 JavaScript 的完全编程能力 ...
- caurina缓动类
一.简单的缓动 一个实例名为box的正方体,开始alpha为0.5,在两秒内移动到x:300 y:100的位置,alpha变为1.import caurina.transitions.Tweener; ...
- git clone一个仓库下的单个文件【记录】
注意:本方法会下载整个项目,但是,最后出现在本地项目文件下里只有需要的那个文件夹存在.类似先下载,再过滤. 有时候因为需要我们只想gitclone 下仓库的单个或多个文件夹,而不是全部的仓库内容,这样 ...