Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
論你是剛接觸 Linux 的文件移動的新手還是已有豐富的經驗,你都可以通過此深入的文章中學到一些東西。
-- Seth Kenlon(作者)
在 Linux 中移動文件看似比較簡單,但是可用的選項卻比大多數人想象的要多。本文介紹了初學者如何在 GUI 和命令行中移動文件,還介紹了底層實際上發生了什么,并介紹了許多有一定經驗的用戶也很少使用的命令行選項。
在研究移動文件之前,有必要仔細研究移動文件系統對象時實際發生的情況。當文件創建后,會將其分配給一個 索引節點(inode),這是文件系統中用于數據存儲的固定點。你可以使用 ls 命令看到文件對應的索引節點:
$ ls --inode example.txt 7344977 example.txt
移動文件時,實際上并沒有將數據從一個索引節點移動到另一個索引節點,只是給文件對象分配了新的名稱或文件路徑而已。實際上,文件在移動時會保留其權限,因為移動文件不會更改或重新創建文件。(LCTT 譯注:在不跨卷、分區和存儲器時,移動文件是不會重新創建文件的;反之亦然)
文件和目錄的索引節點并沒有暗示這種繼承關系,而是由文件系統本身決定的。索引節點的分配是基于文件創建時的順序分配的,并且完全獨立于你組織計算機文件的方式。一個目錄“內”的文件的索引節點號可能比其父目錄的索引節點號更低或更高。例如:
$ mkdir foo $ mv example.txt foo $ ls --inode 7476865 foo $ ls --inode foo 7344977 example.txt
但是,將文件從一個硬盤驅動器移動到另一個硬盤驅動器時,索引節點基本上會更改。發生這種情況是因為必須將新數據寫入新文件系統。因此,在 Linux 中,移動和重命名文件的操作實際上是相同的操作。無論你將文件移動到另一個目錄還是在同一目錄使用新名稱,這兩個操作均由同一個底層程序執行。
本文重點介紹將文件從一個目錄移動到另一個目錄。
圖形用戶界面是大多數人都熟悉的友好的抽象層,位于復雜的二進制數據集合之上。這也是在 Linux 桌面上移動文件的首選方法,也是最直觀的方法。從一般意義上來說,如果你習慣使用臺式機,那么你可能已經知道如何在硬盤驅動器上移動文件。例如,在 GNOME 桌面上,將文件從一個窗口拖放到另一個窗口時的默認操作是移動文件而不是復制文件,因此這可能是該桌面上最直觀的操作之一:
Moving a file in GNOME.
而 KDE Plasma 桌面中的 Dolphin 文件管理器默認情況下會提示用戶以執行不同的操作。拖動文件時按住 Shift 鍵可強制執行移動操作:
Moving a file in KDE.
用于在 Linux、BSD、Illumos、Solaris 和 MacOS 上移動文件的 shell 命令是 mv。不言自明,簡單的命令 mv <source> <destination> 會將源文件移動到指定的目標,源和目標都由 絕對 或 相對 文件路徑定義。如前所述,mv 是 POSIX 用戶的常用命令,其有很多不為人知的附加選項,因此,無論你是新手還是有經驗的人,本文都會為你帶來一些有用的選項。
但是,不是所有 mv 命令都是由同一個人編寫的,因此取決于你的操作系統,你可能擁有 GNU mv、BSD mv 或 Sun mv。命令的選項因其實現而異(BSD mv 根本沒有長選項),因此請參閱你的 mv 手冊頁以查看支持的內容,或安裝你的首選版本(這是開源的奢侈之處)。
要使用 mv 將文件從一個文件夾移動到另一個文件夾,請記住語法 mv <source> <destination>。 例如,要將文件 example.txt 移到你的 Documents 目錄中:
$ touch example.txt $ mv example.txt ~/Documents $ ls ~/Documents example.txt
就像你通過將文件拖放到文件夾圖標上來移動文件一樣,此命令不會將 Documents 替換為 example.txt。相反,mv 會檢測到 Documents 是一個文件夾,并將 example.txt 文件放入其中。
你還可以方便地在移動文件時重命名該文件:
$ touch example.txt $ mv example.txt ~/Documents/foo.txt $ ls ~/Documents foo.txt
這很重要,這使你不用將文件移動到另一個位置,也可以重命名文件,例如:
$ touch example.txt $ mv example.txt foo2.txt $ ls foo2.txt`
不像 cp 命令,mv 命令處理文件和目錄沒有什么不同,你可以用同樣的格式移動目錄或文件:
$ touch file.txt $ mkdir foo_directory $ mv file.txt foo_directory $ mv foo_directory ~/Documents
如果你移動一個文件到一個已有同名文件的地方,默認情況下,mv 會用你移動的文件替換目標文件。這種行為被稱為 清除(clobbering),有時候這就是你想要的結果,而有時則不是。
一些發行版將 mv 別名定義為 mv --interactive(你也可以 自己寫一個 ),這會提醒你確認是否覆蓋。而另外一些發行版沒有這樣做,那么你可以使用 --interactive 或 -i 選項來確保當兩個文件有一樣的名字而發生沖突時讓 mv 請你來確認。
$ mv --interactive example.txt ~/Documents mv: overwrite '~/Documents/example.txt'?
如果你不想手動干預,那么可以使用 --no-clobber 或 -n。該選項會在發生沖突時靜默拒絕移動操作。在這個例子當中,一個名為 example.txt 的文件以及存在于 ~/Documents,所以它不會如命令要求從當前目錄移走。
$ mv --no-clobber example.txt ~/Documents $ ls example.txt
如果你使用 GNU mv,有一個備份選項提供了另外一種安全移動的方式。要為任何沖突的目標文件創建備份文件,可以使用 -b 選項。
$ mv -b example.txt ~/Documents $ ls ~/Documents example.txt example.txt~
這個選項可以確保 mv 完成移動操作,但是也會保護目錄位置的已有文件。
另外的 GNU 備份選項是 --backup,它帶有一個定義了備份文件如何命名的參數。
簡單來說:
$ mv --backup=numbered example.txt ~/Documents $ ls ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:23 example.txt -rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~
可以使用環境變量 VERSION_CONTROL 設置默認的備份方案。你可以在 ~/.bashrc 文件中設置該環境變量,也可以在命令前動態設置:
$ VERSION_CONTROL=numbered mv --backup example.txt ~/Documents $ ls ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:23 example.txt -rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~ -rw-rw-r--. 1 seth users 128 Aug 1 17:22 example.txt.~2~
--backup 選項仍然遵循 --interactive 或 -i 選項,因此即使它在執行備份之前創建了備份,它仍會提示你覆蓋目標文件:
$ mv --backup=numbered example.txt ~/Documents mv: overwrite '~/Documents/example.txt'? y $ ls ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:24 example.txt -rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~ -rw-rw-r--. 1 seth users 128 Aug 1 17:22 example.txt.~2~ -rw-rw-r--. 1 seth users 128 Aug 1 17:23 example.txt.~3~
你可以使用 --force 或 -f 選項覆蓋 -i。
$ mv --backup=numbered --force example.txt ~/Documents $ ls ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:26 example.txt -rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~ -rw-rw-r--. 1 seth users 128 Aug 1 17:22 example.txt.~2~ -rw-rw-r--. 1 seth users 128 Aug 1 17:24 example.txt.~3~ -rw-rw-r--. 1 seth users 128 Aug 1 17:25 example.txt.~4~
--backup 選項在 BSD mv 中不可用。
移動多個文件時,mv 會將最終目錄視為目標:
$ mv foo bar baz ~/Documents $ ls ~/Documents foo bar baz
如果最后一個項目不是目錄,則 mv 返回錯誤:
$ mv foo bar baz mv: target 'baz' is not a directory
GNU mv 的語法相當靈活。如果無法把目標目錄作為提供給 mv 命令的最終參數,請使用 --target-directory 或 -t 選項:
$ mv --target-directory=~/Documents foo bar baz $ ls ~/Documents foo bar baz
當從某些其他命令的輸出構造 mv 命令時(例如 find 命令、xargs 或 GNU Parallel ),這特別有用。
使用 GNU mv,你可以根據要移動的文件是否比要替換的目標文件新來定義移動動作。該方式可以通過 --update 或 -u 選項使用,在BSD mv 中不可用:
$ ls -l ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:32 example.txt $ ls -l -rw-rw-r--. 1 seth users 128 Aug 1 17:42 example.txt $ mv --update example.txt ~/Documents $ ls -l ~/Documents -rw-rw-r--. 1 seth users 128 Aug 1 17:42 example.txt $ ls -l
此結果僅基于文件的修改時間,而不是兩個文件的差異,因此請謹慎使用。只需使用 touch 命令即可愚弄 mv:
$ cat example.txt one $ cat ~/Documents/example.txt one two $ touch example.txt $ mv --update example.txt ~/Documents $ cat ~/Documents/example.txt one
顯然,這不是最智能的更新功能,但是它提供了防止覆蓋最新數據的基本保護。
除了 mv 命令以外,還有更多的移動數據的方法,但是作為這項任務的默認程序,mv 是一個很好的通用選擇。現在你知道了有哪些可以使用的選項,可以比以前更智能地使用 mv 了。
via: https://opensource.com/article/19/8/moving-files-linux-depth
作者: Seth Kenlon 選題: lujun9972 譯者: wxy 校對: wxy
本文由 LCTT 原創編譯, Linux中國 榮譽推出
HTML:htper text markup language超文本標記(標簽)語言
由各種標簽組成,用來制作網頁,告訴瀏覽器如何顯示頁面
w3c:world wide web consortium萬維網聯盟,制定web技術相關標準和規范的組織,HTML技術hi由w3c制定的標準
兩個版本:HTML4.0.1、HTML5.0-----通常H5
官網:http://www.W3shcool.com.cn
HTML文檔是以.html或.htm結尾
記事本notepad、sublime、Notepad++、Dreamweaver、VScode、Webstorm等
使用步驟:
使用技巧:
常見的瀏覽器:IE瀏覽器微軟、chrome谷歌瀏覽器、fifirefox火狐、safari蘋果
瀏覽器的作用是讀取html文件,并以網頁的形式來顯示
瀏覽器不會直接顯示html標簽,而是使用標簽來解釋網頁的內容
一個完整的html標簽的組成:
<標簽名 屬性名="屬性值">內容</標簽名>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>標簽</title>
</head>
<body bgcolor="red" text="blue">
html從入門到精通!
</body>
</html>
12345678910
屬性值要用雙撇號括起來,一般用雙引號
根據標簽是否關閉,分為,關閉型和非關閉型
<html></html>
<head></head>
<title></title>
非關閉型:沒有結束標簽
<meta>
<br>
<h1>....<h6>
根據標簽是否獨占一行,分為塊級標簽和行級標簽
塊級標簽:顯示為塊狀,獨占一行
<h1>大家好</h1>
<hr>
行級標簽:在行內顯示,可與其他內容在同一行顯示
<span></span>
注釋在瀏覽器中不會顯示,是用來標注解釋html語句,但通過查看源代碼的方式可以看到
語法:
<--注釋內容-->
也稱為特殊字符,用于顯示一些特殊符號,如<>&空格等
語法:
<&實體字符的名稱>
在html文檔的第一行,使用<!DOCTYPE html>
聲明HTML文檔的類型用來告訴瀏覽器頁面的文檔嘞型,用來制定html版本的規范
目前基本上最常用的html5
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
</body>
</html>
12345678910
1.基本標簽
1.1 有序列表
ol:ordered listli:list item默認使用阿拉伯數字、從1開始標記,可以通過屬性進行修改
· type屬性:設置列表的符號標記、取值;數字1(默認)、字母(a或A)、羅馬數字(i或I) · start屬性:設置起始值,值必須是數字
1.2 無序列表
ul:unodered list
li:list item
默認情況下使用實心圓表作為符號標記,可以通過屬性進行修改
· type屬性:設置列表的符號標記、取值:disc實心圓(默認)、circle空心圓、square正方形、none不 顯示項目符號
1.3 定義列表
dl:definition list
dt:definition title
dd:definition description
1.4 水平線標簽
hr:horizontal
常用屬性:
· color:顏色
兩種方式:
顏色名稱:如red、green、blue、white、black、pink、orange等
16進制的RGB表示法:Red、Green、Blue用法:#RRGGBB 每種顏色的取值范值0-255,轉換為16 進制00-FF
如: #FF0000 紅色 #00FF00綠色 #0000FF藍色 #FFFFFF白色、#CCCCCC #FF7300桔色
· size:粗細,數值
· width寬度
兩種寫法:
? 像素:絕對值(固定值)
? 百分比:相對值,相對于水平線標簽所在父容器寬度的百分比
· align對齊
? 取值:center居中 left right
1.5圖像標簽
img:image
常見的圖片格式:.jpg .png .gif .bmp
常見的屬性:
· src:source指定圖片的路徑(來源),必選叁數
如果圖片與html源代碼在同一個文件夾中,可以直接在src中寫圖片名稱即可
習慣上,我們會將多個圖片與html代碼文檔分別放在同一個文件夾project中的不同目錄下,此時需要 在src中指定圖片的路徑為相對路徑
路徑的分類:
? · 相對路徑
? 表示: ./當前路徑
…/當前位置的上一級文件夾
? 提示:…/image
? · alt:當圖片無法顯示時顯示的提示信息
? · title:當鼠標放到圖片上時顯示的提示信息
? · width和 height:設置圖片的寬度和高度
默認圖片以原始尺寸顯示
? 如果只設置其中一個,則另一個會按比例縮放
? 如果同時設置寬和高,可能導致圖片變形
? 兩種寫法:
? 像素:絕對值(固定值)
? 百分比:相對值,相對于父容器的尺寸的百分比
2.其他標簽
為了更好語義化
3.頭部標簽
· meta定義網頁的摘要信息,如字符編碼,關鍵詞,描述,作者等
· title定義網頁的標題
· style定義內容css樣式
· link引用外部css樣式
· script定義或引用腳本
· base定義基礎路徑
默認以當前頁面文件所在的位置為相對路徑參照
4.標簽嵌套
一個標簽中嵌套另外一個標簽
標簽不能亂嵌套
瀏覽器渲染后顯示的頁面代碼與編碼時有所不同
chrome瀏覽器提供的開發工具:幫助開發人員查看和調試頁面的
如何打開:
· Elements:從瀏覽器的角度來看頁面,瀏覽器渲染頁面時內部的結構
· console:控制臺,顯示各種警告和錯誤信息
· network:查看網絡請求信息,瀏覽器向服務器請求了哪些資源,資源大小,
加載資源所消耗的時間
四、超鏈接
1.簡介
使用超鏈接可以從一個頁面跳轉到另外一個頁面,實現頁面之間導航
當鼠標移動到超鏈接文本或圖片時,鼠標箭頭會變成一只小手
超鏈接有三種類型:
普通鏈接/頁面間的鏈接,跳轉到另一個頁面 錨鏈接:鏈接到錨點(鏈接到同一個頁面的指定位置) 功能鏈接:實現特殊功能(發郵件,下載)
2.基本用法
使用 標簽來創建超鏈接
語法格式:
常用屬性:
href:鏈接地址或路徑,鏈接地址
world
鏈接文本或圖片
1 2 3 4 5 1 target:鏈接打開的位置,取值
路徑分類:
絕對路徑 以根開始的路徑
file:///D:/software/b.html https://www.baidu.com/img/bd_logo1.png
相對路徑 相對于當前頁面文件所在的路徑,不是以根開始的路徑 ./ 當前路徑 …/ 當前位置上一級目錄
3.錨鏈接
3.1簡介
點擊鏈接后跳轉到某一個頁面的指定位置(錨點anchor)
錨鏈接的分類:
頁面內的錨鏈接 頁面間的錨鏈接
3.2 頁面內的錨鏈接
步驟:
3.3 頁面間的錨鏈接
4.功能鏈接
5.URL
5.1 簡介
URL:Uniform Resource Locator 統一資源定位器,用來定位資源所在的位置,最常見的就是網址
5.2 組成
一個完整的URL由8個部分組成:
協議:prococol 如 http:超文本傳輸協議,用來訪問WEB網站Hyper text Transfer protocal https:更加安全的協議 SSL安全套接子層 ftp文件傳輸協議,用來訪問服務器上的文件,實現文件的上傳和下載File Transfer protocol file:文件協議,用來訪問本地文件 主機名hostname服務器地址或服務器Netbios名稱,如www.baidu.com ftp://10.255.254.254 端口:port位于主機名的后面,使用冒號進行分隔 不同的協議使用不同的端口,如http使用80端口,https使用的443端口,ftp使用20和21 如果使用的是默認端口,則端口可以省略 如果使用的不是默認端口,則必須指定端口http://59.49.32.213:7070/ 路徑:path目標文件所在的路徑結構,如:www.baidu.com/img/ 資源resource要訪問的目標文件,如bd_logo1.png 查詢字符串:query string 也稱為參數 在資源后面使用?開頭的一組名稱/值
鏈接文本
鏈接文本
https://www.baidu.com/img/bd_logo1.png?name=tom&age=2&sex=male https://www.w3school.com.cn/html/html_quotation_elements.asp file:///C:/Users/Administrator/Desktop/project/code/09.%E5%B8%B8%E7%94%A8%E6%A0%87%E7%A D%BE3.html http://www.sxgjpx.net/ ftp://10.255.254.253/
1
1
1 2 3
4 5
名稱和值之間以=分隔,多個之間用&分隔,如:name=tom&age=2&sex=male 錨點anchor,在資源后面使用#開頭的文本,如#6 身份認證authentication,指定身份信息,如:ftp://賬戶:密碼@ftp.bbshh010.com
五、表格
1.簡介
表格是一個規則的行列結構,每個表格是由若干行組成,每行由若干個單元格組成
table row column
2.基本結構
2.1 table標簽
用來定義表格
常用屬性:
border:表格邊框 默認為0 width/height:寬度/高度 bordercolor:邊框的顏色 align:對齊方式,取值:left(默認) center居中 right居右 bgcolor:背景顏色 background:背景圖片 cellspacing間距:單元格與單元格之間的距離 cellpadding邊距:單元格中的內容到邊界之間的距離
2.2 tr標簽
用來定義行:table row
常用屬性:
align:水平對齊 取值:left(默認) center right valign垂直對齊 取值:top center bottom bgcolor:背景顏色 background:背景圖片
2.3 td標簽
用來定義單元格,table data
常用屬性:align、valign、bgcolor、background
注意:表格必須是由行組成,行必須由單元格來組成,數據必須放到單元格中
3.合并單元格
合并單元格也稱為單元格的跨行跨列
兩個屬性:
rowspan 設置單元格所跨的行數 colspan 設置單元格所跨的列數
步驟:
六、表單
1.簡介
表單是一個包含若干個表單元素的區域,用于獲取瑣類型的用戶數據
表單元素是允許用戶在表單輸入信息的元素,如文本框、密碼框、單選按鈕、復選框、下拉列表、按鈕等
2.表單結構
2.1表單語法
1
2.2form標簽
用來定義表單,可以包含多個表單元素
常用屬性:
action:提交數據給誰處理,即處理數據的程序,默認為當前頁面 method:提交數據的方式或方法,取值:get(默認),post get和post的區別: get:以查詢字符串的形式提交,在地址欄中能看到,長度有限制,不安全 post以表單數據組的形式進行提交,在地址欄中看不到,長度無限制,安全 enctype(encode type)編碼類型:提交數據的編碼,取值:application/X-www-form-urlencoded(默 認)、multipart/form-data(文件上傳)
3.表單元素
大多數的表單元素都是使用 標簽來定義的,通過設置屬性type來定義不同的表單元素
1
3.1單行文本框
常用屬性:
·name名稱,很重要,如果沒有定義name屬性,則該表單元素的數據是無法提交的
·value初始值
·size顯示寬度
·maxlength:大字符數,默認是沒有限制
·readonly只讀:readonly=“readonly”,可簡寫readonly,即只寫屬性名
·disabled禁用:disabled=“disabled”, 可簡寫disabled完全禁用
表單元素被提交的兩個條件,1.有name屬性2.非disabled
3.2 單選按鈕
常用屬性:
·name名稱:多個radio的name屬性必須相同,才能實現互斥(單選)
·value值
·checked:是否被選中,兩種狀態,選中,未選中 checked=“checked” 簡寫 checked
3.3 復選框
常用屬性與單選按鈕radio類似
3.4 文件選擇器
常用屬性:
·name:名稱
·accept設置可選擇的文件類型,用來限制上傳的文件類型
使用MIME格式字符串對資源類型進行限制
常見的MIME類型:
·純文本:text/plain text/xml text/html
· 圖像:image/png image/jpeg image/gif
4.特殊表單元素
4.1下拉列表
select常用屬性:
·name名稱
·size行數,同時顯示多個選項
·multiple允許同時選擇多個
option常用屬性:
·value選項值
·selected設置默認選中項
optgroup常用屬性:
·label分組的標簽
4.2文本域
·name名稱
·rows行數
·cols列數
5、其他標簽
5.1 label標簽
為表單元素提供標簽,當選中label標簽中的文本內容時會自動將光標切換到與之相關聯的表單元素。
常用屬性:
·for必須將該屬性值設置為與相關聯的表單元素的Id屬性值相同。
注:幾乎所有HTML標簽都具有id屬性,且id值必須唯一。
5.2 button標簽
也表示按鈕,與input按鈕類似
語法:
1按鈕文字或圖像
常用屬性:
·type按鈕的類型,取值: submit(默認)、reset、button
5.3 fieldset和legend標簽
fieldset標簽,對表單元素進行分組
legend標簽,對分組添加標題
七、內嵌框架
1、簡介
使用iframe可以在一個頁面中引用另一個頁面,實現復用、靈活
2、基本用法
語法:
1
常用屬性:
· src:引用的頁面
· width/height寬度/高度 ,像素或百分比
· frameborder是否顯示邊框,取值:1(yes) 0(no)—默認
· scrolling是否顯示滾動條,取值:yes no auto
· name屬性 為框架定義名稱
3、在框架中打開鏈接
1
2
3鏈接的文本或圖像
八、HTML5簡介
1、發展
W3C于1992年12月發布了HTML4.0.1標準
W3C于2014年10月發布了HTML5標準
2、特點
· 取消了過時的標簽,如font、center等,它們僅具有展示外觀的功能
· 增加了一些更具有語義化的標簽,如header、footer、aside等
· 增加了一些新功能標簽,如canvas、audio、video
· 增加了一些表單控件,如email、date、time、url、search等
· 可以直接在瀏覽器中繪畫(canvas),無需flash
· 增加了本地存儲的支持
3、兼容性
http://caniuse.com
提供了各種瀏覽器版本對HTML5和CSS規范的支持度
九、HTML5新增內容
1、結構相關的標簽
用來進行頁面結構布局,本身無任何特殊樣式,需要使用CSS進行樣式設置
· article定義一個獨立的內容,完整的文章
· section定義文檔的章節、段落
· header文章的頭部、頁眉、標題
· footer文章的底部、頁腳、標注
· aside定義側邊欄
· figure圖片區域
· figcaption為圖片區域定義標題
· nav定義導航菜單
結構標簽只是表明各部分的角色,并無實際的外觀樣式,與普通div相同
2、語義相關的標簽
2.1 mark標簽
標注,用來突出顯示文本,默認添加黃色背景
2.2 time標簽
定義日期和時間,便于搜索引擎智能查找
2.3 details和 summary標簽
默認顯示summary中的內容,點擊后顯示details中的內容
注:并不是所有的瀏覽器都兼容,chrome、opera支持、Firefox、IE瀏覽器不支持
2.4 meter標簽
計數儀,表示度量
常用屬性:
· max定義大值,默認為1
· min定義小值,默認為0
· value定義當前值
· high定義限定為高的值
· low定義限定為低的值
· optimum定義佳值
規則:
當value大于high時為綠色
當value在low與high之間時為黃色
當value小于low時為紅色
當value小于low時為綠色
當value在low與high之間時為黃色
當value大于high時為紅色
2.5 progress標簽
進度條,表示運行中的進度
常用屬性:
· value定義當前值
· max定義完成的值
3.表單相關
3.1 新增表單元素
新增以下type類型:
· email接收郵箱
· url接收URL
· tel接收電話號碼,目前僅在移動設備上有效
· search搜索文框
· number/range接收數字/數字滑塊,包含min,max,step屬性
· date/month/week/time/datetime日期時間選擇器,兼容性不好
· color顏色拾取
作用:
· 具有格式校驗的功能
· 可以與移動設備的鍵盤相關聯
3.2新增表單屬性
form標簽的屬性:
· autocomplete是否啟動表單的自動完成功能, 取值:on(默認)、o?
· novalidate提交表單時不進行校驗,默認會進行表單校驗
3.3 新增表單元素的屬性
新增表單元素屬性:input/select/textarea等
· placeholder提示文字
· required是否必填
· autocomplete是否啟用該表單元素的自動完成功能
· autofocus設置初始焦點元素
· pattern使用正則表達式(RegExp后面會講解),進行數據校驗
· list使文本元素具有下拉列表的功能,需要配合datalist和option標簽一起使用
· form可以將表單元素寫在form標簽外面,然后通過該屬性關聯指定的表單
4、多媒體標簽
4.1audio標簽
在頁面中插入音頻,不同的瀏覽器對音頻格式的支持不一樣
audio常用屬性:
· src音頻文件的來源
· controls是否顯示控制面板,默認不顯示
· autoplay是否自動播放,默認不自動播放
· loop是否循環播放
· muted是否靜音
· preload是否預加載,取值:none不預加載、auto預加載(默認)、metadata只加載元數據
如果設置了autoplay屬性,則該屬性無效
可以結合source標簽使用,指定多個音頻文,瀏覽器會檢測并使用第一個可用的音頻文件
4.2 video標簽
在頁面中插入視頻,不同的瀏覽器對視頻格式的支持不一樣
用法與audio標簽基本相同,增加屬性:
· widht/height視頻播放器的寬度/高度
· poster在視頻加載前顯示的圖片
<html>
<body>
<tiele>HTML技術</tiele>
</body>
<body>
大家好,歡迎學習html技術!
</body>
</html>1234567
效果
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-h271e4v6-1593240920352)(C:\Users\lenovo\Desktop\新建文件夾\靜態網頁2\案例\result\案例1.png)]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>標簽</title>
</head>
<body text="blue">
標簽的組成
<br>
html從入門到精通!
<hr>
<h1>標簽的分類</h1>
<hr>
<h2>標簽的分類</h2>
<hr>
<h6>標簽的分類</h6>
<hr>
<span>哈哈</span>嘿嘿
</body>
</html>1234567891011121314151617181920212223
效果
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-jx6zJE1P-1593240920354)(C:\Users\lenovo\Desktop\新建文件夾\靜態網頁2\案例\result\案例2.png)]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
圖書:<<HTML從入門到精通<<
<hr>
北京 上海 廣州
<hr>
在HTML中用<表示<小于號
<hr>
“HTML語言” 或 &qout;HTML語言&qout;
<hr>
版權所有? 2000-2020 高教培訓
<hr>
×關閉符號
</body>
</html>123456789101112131415161718192021222324
效果
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nuFLl3hm-1593240920355)(C:\Users\lenovo\Desktop\新建文件夾\靜態網頁2\案例\result\案例3.png)]
(剩下的下期出)
原文鏈接:https://blog.csdn.net/WanXuang/article/details/106982782?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160513384519724835852804%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160513384519724835852804&biz_id=&utm_medium=distribute.pc_search_top_result.none-task-code-2~all~top_position~default-1-106982782-12.nonecase&utm_term=html
作者:WanXuang
出處:從CSDN
heckbox應該不被選擇
[Arguments] ${locator}
Checkbox Should Not Be Selected ${locator}
Frame應該包含文本
[Arguments] ${locator} ${text} ${loglevel}=INFO
Frame Should Contain ${locator} ${text} ${loglevel}
List應該無選項
[Arguments] ${locator}
List Should Have No Selections ${locator}
List選項應該是
[Arguments] ${locator} @{items}
List Selection Should Be ${locator} @{items}
Radio按鈕不應該被選擇
[Arguments] ${group_name}
Radio Button Should Not Be Selected ${group_name}
Radio按鈕應該被設置成
[Arguments] ${group_name} ${value}
Radio Button Should Be Set To ${group_name} ${value}
Url應該包含
[Arguments] ${expected}
Location Should Contain ${expected}
Xpath應該匹配X次
[Arguments] ${xpath} ${expected_xpath_count} ${msg}= ${loglevel}=INFO
Xpath Should Match X Times ${xpath} ${expected_xpath_count} ${msg} ${loglevel}
checkbox應該被選擇
[Arguments] ${locator}
checkbox should be selected ${locator}
url應該是
[Arguments] ${url}
Location Should Be ${url}
下次確認選擇取消
Choose Cancel On Next Confirmation
下次確認選擇確定
Choose Ok On Next Confirmation
從List中取消選項
[Arguments] ${locator} @{items}
Unselect From List ${locator} @{items}
從List選擇選項
[Arguments] ${locator} @{items}
Select From List ${locator} @{items}
偏移拖拽
[Arguments] ${source} ${xoffset} ${yoffset}
Drag And Drop By Offset ${source} ${xoffset} ${yoffset}
元素應該不包含文本
[Arguments] ${locator} ${expected} ${msg}=
Element Should Not Contain ${locator} ${expected} ${msg}
元素應該不可用
[Arguments] ${locator}
Element Should Be Disabled ${locator}
元素應該不可見
[Arguments] ${locator} ${msg}=
Element Should Not Be Visible ${locator} ${msg}
元素應該包含文本
[Arguments] ${locator} ${text}
Element Should Contain ${locator} ${text}
元素應該匹配x次
[Arguments] ${locator} ${count} ${msg}= ${loglevel}=INFO
Locator Should Match X Times ${locator} ${count} ${msg} ${loglevel}
元素應該可用
[Arguments] ${locator}
Element Should Be Enabled ${locator}
元素應該可見
[Arguments] ${locator}
Element Should Be Visible ${locator}
元素文本應該是
[Arguments] ${locator} ${expected} ${msg}=
Element Text Should Be ${locator} ${expected} ${msg}
全選List元素
[Arguments] ${locator}
Select All From List ${locator}
關閉所有瀏覽器
Close All Browsers
關閉瀏覽器
Close Browser
關閉窗口
Close Window
切換瀏覽器
[Arguments] ${index}
Switch Browser ${index}
創建Webdriver
[Arguments] ${driver_name} ${alias}= ${kwargs}={}
Create Webdriver ${driver_name} ${alias} ${kwargs}
刪除Cookie
[Arguments] ${name}
Delete Cookie ${name}
刪除所有Cookie
Delete All Cookies
刪除本地策略
[Arguments] ${strategy_name}
Remove Location Strategy ${strategy_name}
刷新頁面
Reload Page
雙擊元素
[Arguments] ${locator}
Double Click Element ${locator}
取消選擇Checkbox
[Arguments] ${locator}
Unselect Checkbox ${locator}
取消選擇Frame
Unselect Frame
回退
Go Back
在圖片上按下鼠標左鍵
[Arguments] ${locator}
Mouse Down On Image ${locator}
在連接上按下鼠標左鍵
[Arguments] ${locator}
Mouse Down On Link ${locator}
應該出現警告彈窗
[Arguments] ${text}=
Alert Should Be Present ${text}
當前Frame不應該包含
[Arguments] ${text} ${loglvl}=INFO
Current Frame Should Not Contain ${text} ${loglvl}
當前Frame包含
[Arguments] ${text} ${loglevel}=INFO
Current Frame Contains ${text} ${loglevel}
截屏
[Arguments] @{filename}
Capture Page Screenshot @{filename}
打開瀏覽器
[Arguments] ${url} ${browser}=chrome @{args}
Open Browser ${url} ${browser} @{args}
打開菜單
[Arguments] ${locator}
Open Context Menu ${locator}
執行js
[Arguments] ${code}
Execute Javascript ${code}
執行異步js
[Arguments] ${code}
Execute Async Javascript ${code}
拖拽元素
[Arguments] ${source} ${target}
Drag And Drop ${source} ${target}
按下鼠標左鍵
[Arguments] ${locator}
Mouse Down ${locator}
按鍵
[Arguments] ${locator} ${key}
[Documentation] 按鍵 \ \ text_field \ \ q
...
... 按鍵 \ \ login_button \ \13 \ \ #ASCII Code for enter Key
Press Key ${locator} ${key}
提交表單
[Arguments] ${locator}=
Submit Form ${locator}
文本區值應該是
[Arguments] ${locator} ${expected} ${msg}=
Textarea Value Should Be ${locator} ${expected} ${msg}
文本區應該包含
[Arguments] ${locator} ${expected} ${msg}=
Textarea Should Contain ${locator} ${expected} ${msg}
文本框值應該是
[Arguments] ${locator} ${expected} ${msg}=
Textfield Value Should Be ${locator} ${expected} ${msg}
文本框應該包含
[Arguments] ${locator} ${expected} ${msg}=
Textfield Should Contain ${locator} ${expected} ${msg}
最大化
Maximize Browser Window
標題應該是
[Arguments] ${title}
Title Should Be ${title}
根據Index從List中取消選項
[Arguments] ${locator} @{indexes}
Unselect From List By Index ${locator} @{indexes}
根據Index從List選擇
[Arguments] ${locator} @{indexes}
Select From List By Index ${locator} @{indexes}
根據Label從List中取消選項
[Arguments] ${locator} @{Labels}
Unselect From List By Label ${locator} @{Labels}
根據Label從List選擇
[Arguments] ${locator} @{labels}
Select From List By Label ${locator} @{labels}
根據Value從List中取消選項
[Arguments] ${locator} @{values}
Unselect From List By Value ${locator} @{values}
根據Value從List選擇
[Arguments] ${locator} @{values}
Select From List By Value ${locator} @{values}
根據值選擇列表元素
[Arguments] ${locator} ${value}
Select From List By Value ${locator} ${value}
模擬
[Arguments] ${locator} ${event}
Simulate ${locator} ${event}
注冊失敗后運行的關鍵字
[Arguments] ${kwd}
Register Keyword To Run On Failure ${kwd}
添加cookie
[Arguments] ${name} ${value} ${path}= ${domain}= ${secure}= ${expiry}=
添加本地策略
[Arguments] ${strategy_name} ${strategy_keyword} ${persist}=False
Add Location Strategy ${strategy_name} ${strategy_keyword} ${persist}
清除元素文本
[Arguments] ${locator}
Clear Element Text ${locator}
點擊元素
[Arguments] ${path}
Click Element ${path}
點擊元素坐標
[Arguments] ${locator} ${xoffset} ${yoffset}
Click Element At Coordinates ${locator} ${xoffset} ${yoffset}
點擊圖片
[Arguments] ${locator}
Click Image ${locator}
點擊按鈕
[Arguments] ${path}
Click Button ${path}
點擊鏈接
[Arguments] ${locator}
Click Link ${locator}
睡眠
[Arguments] ${time}
Sleep ${time}
確認
Confirm Action
窗口列表
@{list} List Windows
[Return] @{list}
等待元素不包含文本
[Arguments] ${locator} ${text} ${timeout}= ${error}=
Wait Until Element Does Not Contain ${locator} ${text} ${timeout} ${error}
等待元素不可見
[Arguments] ${locator} ${timeout}= ${error}=
Wait Until Element Is Not Visible ${locator} ${timeout} ${error}
等待元素包含文本
[Arguments] ${locator} ${text} ${timeout}= ${error}=
Wait Until Element Contains ${locator} ${text} ${timeout} ${error}
等待元素可用
[Arguments] ${locator} ${timeout}= ${error}=
Wait Until Element Is Enabled ${locator} ${timeout} ${error}
等待元素可見
[Arguments] ${locator} ${timeout}=30
Wait Until Element Is Visible ${locator} ${timeout}
等待執行成功
[Arguments] ${timeout} ${retry} ${keyword} @{args}
Wait Until Keyword Succeeds ${timeout} minutes ${retry} sec ${keyword} @{args}
等待條件成立
[Arguments] ${condition} ${timeout}= ${error}=
Wait For Condition ${condition} ${timeout} ${error}
等待頁面不包含元素
[Arguments] ${locator} ${timeout}= ${error}=
Wait Until Page Does Not Contain Element ${locator} ${timeout} ${error}
等待頁面包含元素
[Arguments] ${locator} ${timeout}= ${error}=
Wait Until Page Contains Element ${locator} ${timeout} ${error}
等待頁面包含文本
[Arguments] ${text} ${timeout}= ${error}=
Wait Until Page Contains ${text} ${timeout} ${error}
給元素分配ID
[Arguments] ${locator} ${id}
Assign Id To Element ${locator} ${id}
獲取Cookie值
[Arguments] ${name}
${value} Get Cookie Value ${name}
[Return] ${value}
獲取List元素
[Arguments] ${locator}
@{items} Get List Items ${locator}
獲取List多個選定值
[Arguments] ${locator}
@{values} Get Selected List Values ${locator}
[Return] @{values}
獲取List多個選定標簽
[Arguments] ${locator}
@{labels} Get Selected List Labels ${locator}
[Return] @{labels}
獲取List選定值
[Arguments] ${locator}
${value} Get Selected List Value ${locator}
[Return] ${value}
獲取List選定標簽
[Arguments] ${locator}
${label} Get Selected List Label ${locator}
[Return] ${label}
獲取Selenium等待時間
${sec} Get Selenium Implicit Wait
[Return] ${sec}
獲取Selenium超時
${timeout} Get Selenium Timeout
[Return] ${timeout}
獲取Selenium速率
${res} Get Selenium Speed
[Return] ${res}
獲取xpath匹配次數
[Arguments] ${xpath}
${count} Get Matching Xpath Count ${xpath}
[Return] ${count}
獲取元素值
[Arguments] ${locator}
${value} Get Value ${locator}
[Return] ${value}
獲取元素屬性
[Arguments] ${attribute_locator}
Get Element Attribute ${attribute_locator}
獲取元素文本
[Arguments] ${locator}
${text} Get Text ${locator}
[Return] ${text}
獲取坐標
${location} Get Location
[Return] ${location}
獲取垂直坐標
[Arguments] ${locator}
${vertical} Get Vertical Position ${locator}
[Return] ${vertical}
獲取當前Url
${url} Log Location
[Return] ${url}
獲取當前頁面標題
${title} Log Title
[Return] ${title}
獲取所有Cookie
@{cookies} Get Cookies
[Return] @{cookies}
獲取所有連接
@{links} Get All Links
[Return] @{links}
獲取文本
[Arguments] ${path}
${text} get text ${path}
[Return] ${text}
獲取標題
${title} get title
[Return] ${title}
獲取水平坐標
[Arguments] ${locator}
@{position} Get Horizontal Position ${locator}
[Return] @{position}
獲取焦點
[Arguments] ${locator}
Focus ${locator}
獲取窗口名字
@{names} Get Window Names
[Return] @{names}
獲取窗口坐標
${x} ${y}= Get Window Position
[Return] ${x} ${y}
獲取窗口大小
${width} ${higth}= GET Window Size
[Return] ${width} ${higth}
獲取窗口標識
@{windows} Get Window Identifiers
[Return] @{windows}
獲取窗口標題
@{titles} Get Window Titles
[Return] @{titles}
獲取表格內容
[Arguments] ${table_locator} ${row} ${column} ${loglevel}=INFO
${cell} Get Table Cell ${table_locator} ${row} ${column} ${loglevel}
[Return] ${cell}
獲取警告信息
${msg} Get Alert Message
[Return] ${msg}
獲取資源
${source} Get Source
[Return] ${source}
獲取頁面元素
[Arguments] ${locator}
@{elements} Get Webelements ${locator}
[Return] @{elements}
獲取頁面標題
${title} Get Title
[Return] ${title}
獲取頁面資源
[Arguments] ${loglevel}=INFO
${source} Log Source ${loglevel}
[Return] ${source}
表頭應該包含
[Arguments] ${table_locator} ${expected} ${loglevel}=INFO
table header should contain ${table_locator} ${expected} ${loglevel}
表頭應該包含文本
[Arguments] ${table_locator} ${expected} ${loglevel}=INFO
Table Header Should Contain ${table_locator} ${expected} ${loglevel}
表應該包含文本
[Arguments] ${table_locator} ${expected} ${loglevel}=INFO
Table Should Contain ${table_locator} ${expected} ${loglevel}
表格Footer應該包含文本
[Arguments] ${table_locator} ${expected} ${loglevel}
Table Footer Should Contain ${table_locator} ${expected} ${loglevel}
表格列應該包含文本
[Arguments] ${table_locator} ${col} ${expected} ${loglevel}=INFO
Table Column Should Contain ${table_locator} ${col} ${expected} ${loglevel}
表格應該包含
[Arguments] ${table_locator} ${row} ${column} ${expected}
table cell should contain ${table_locator} ${row} ${column} ${expected}
表格應該包含文本
[Arguments] ${table_locator} ${row} ${column} ${expected} ${loglevel}=INFO
Table Cell Should Contain ${table_locator} ${row} ${column} ${expected} ${loglevel}
表格行應該包含文本
[Arguments] ${table_locator} ${row} ${expected} ${loglvl}=INFO
Table Row Should Contain ${table_locator} ${row} ${expected} ${loglvl}
設置Selenium等待
[Arguments] ${seconds}
${return} Set Selenium Implicit Wait ${seconds}
[Return] ${return}
設置Selenium超時
[Arguments] ${seconds}
Set Selenium Timeout ${seconds}
設置Selenium速率
[Arguments] ${speed}
Set Selenium Speed ${speed} seconds
設置瀏覽器等待時間
[Arguments] ${seconds}
Set Browser Implicit Wait ${seconds}
設置窗口坐標
[Arguments] ${x} ${y}
Set Window Position ${x} ${y}
設置窗口大小
[Arguments] ${width} ${higth}
Set Window Size ${width} ${higth}
跳轉
[Arguments] ${url}
Go To ${url}
跳轉到
[Arguments] ${url}
go to ${url}
輸入密碼
[Arguments] ${path} ${passwd}
Input password ${path} ${passwd}
輸入文本
[Arguments] ${path} ${str}
Input Text ${path} ${str}
選擇Checkbox
[Arguments] ${locator}
Select Checkbox ${locator}
選擇Frame
[Arguments] ${locator}
Select Frame ${locator}
選擇Radio按鈕
[Arguments] ${group_name} ${value}
Select Radio Button ${group_name} ${value}
選擇文件
[Arguments] ${locator} ${file_path}
Choose File ${locator} ${file_path}
選擇窗口
[Arguments] ${locator}=
Select Window ${locator}
頁面應該不包含Checkbox
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Checkbox ${locator} ${msg} ${loglevel}
頁面應該不包含Link
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Link ${locator} ${msg} ${loglevel}
頁面應該不包含List
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain List ${locator} ${msg} ${loglevel}
頁面應該不包含Radio按鈕
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Radio Button ${locator} ${msg} ${loglevel}
頁面應該不包含元素
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Element ${locator} ${msg} ${loglevel}
頁面應該不包含圖片
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Image ${locator} ${msg} ${loglevel}
頁面應該不包含按鈕
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Button ${locator} ${msg} ${loglevel}
頁面應該不包含文本
[Arguments] ${text} ${lvl}=INFO
Page Should Not Contain ${text} ${lvl}
頁面應該不包含文本框
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Not Contain Textfield ${locator} ${msg} ${loglevel}
頁面應該包含Checkbox
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Checkbox ${locator} ${msg} ${loglevel}
頁面應該包含Link
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Link ${locator} ${msg} ${loglevel}
頁面應該包含List
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain List ${locator} ${msg} ${loglevel}
頁面應該包含Radio按鈕
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Radio Button ${locator} ${msg} ${loglevel}
頁面應該包含元素
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Element ${locator} ${msg} ${loglevel}
頁面應該包含圖片
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Image ${locator} ${msg} ${loglevel}
頁面應該包含按鈕
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Button ${locator} ${msg} ${loglevel}
頁面應該包含文本
[Arguments] ${text} ${loglevel}=INFO
Page Should Contain ${text} ${loglevel}
頁面應該包含文本框
[Arguments] ${locator} ${msg}= ${loglevel}=INFO
Page Should Contain Textfield ${locator} ${msg} ${loglevel}
鼠標懸停
[Arguments] ${locator}
Mouse Over ${locator}
鼠標移出
[Arguments] ${locator}
Mouse Out ${locator}
鼠標釋放
[Arguments] ${locator}
Mouse Up ${locator}
RFS自動化測試工具安裝與使用總結
一,調試
1,在調試時,總時提示“無法打開瀏覽器”
解決辦法:
1,把瀏覽器的代理關閉
2,把瀏覽器的顯示比例調到100%
3,在IE設置的安全選項中,把啟用保護模式開啟
4,去除進入系統彈出的登錄提示
在瀏覽器中---工具---internet選項---安全---把只在intranet自動登錄,改為匿名登錄
二,安裝加載庫
1,RequestsLibrary
先安裝Requests工具,再安裝RequestsLibrary
再在robot中進行加載lib,如果加載的庫還是紅色的,重啟就可以了
三,常用關鍵字
open browser 打開瀏覽器
input text 在文本框中錄入內容
input password 在文本框中錄入密碼
click button 點擊按鈕
page should (NOT)contain (link,button,element,checkbox,list) 頁面是否出現指定的內容
close browser 關閉瀏覽器
多個打開瀏覽器切換
open browser http://127.0.0.1:8000/ ie local
switch browser local
針對頁面彈出窗口的確認鍵
confirm action----類似于點擊彈出窗的確認或OK鍵
alert should be present 當前彈窗的內容 -----判斷當前指定內容的彈窗是否存在
get alert message---獲取彈出窗的信息
${msg}= get alert message
should be equal as string ${msg} *****
在彈窗中選擇取消操作
a,choose cancle on next confirmaction
b,confirm action
設置日志級別
Set Log Level TRACE
下拉列表
select from list xpath value
select from list by value xpath value
select from list by index xpath value
框架
select frame id=fra
unselect frame
復選框
select checkbox id=CheckYes
unselect checkbox id=CheckNo
checkbox should not be selected
select checkbox
checkbox should be selected
單選框
select radio button radio1---單選框名稱 A--value)
click element id=registerGenderMale
Oracle數據庫
connect to database using custom params(關鍵字) cx_Oracle 用戶名,密碼,SID
${row} row count select * from 表1;
等待頁面加載
wait until page contains element
sleep
reload page---刷新
注釋
Comment
幾個關鍵字的區別
Wait Until Keyword Succeeds
wait until page contains element
SLEEP
element should contain
page should contain element
page should contain
Element Should Not Be Visible
判斷的使用
判斷條件---數字對比
Run Keyword If ${res} == 0 執行的關鍵字
... ELSE 執行的關鍵字2
判斷條件---字符對比
Run Keyword If ‘${res}’ == ‘ttttt' 執行的關鍵字
判斷條件---布爾類型對比
Run Keyword If '${res}' == '${true}' 執行的關鍵字
HTTP接口
create session httpserver http://localhost:8000
${addr} Get request httpserver users/s
should be equal as strings ${addr.status_code} 200
log ${addr.content}
${resp} tojson ${addr.content}
四,常見問題解答
1,定位不到元素
Element locator '//input[@id="registerName"]' did not match any elements.
前端代碼
<td>
<div class="c">
<span id="disp_registerName" class="cp edit_hide" style="display: none;"></span>
<input id="registerName" class="pa_ui_text edit_show pa_ui_element_normal" type="text" otitle="車主姓名" value="" name="register.name" style="display: inline;">
</div>
</td>
解決方法:
先從最里面的元素開始一級一級往上找,找到iframe,然后先select frame這個ID就可以定位到里面的元素了。
2,InvalidElementStateException: Message: u'Element must not be hidden, disabled or read-only'
針對根據復選框的狀態,解決文本框中默認帶出內容時。如果這樣寫就會報錯
select checkbox id=noLicenseFlag
input text id=registerName 湘A*
像這樣的組合,后面那句input text id=registerName 湘A*直接刪除就可以了。
3,頁面操作按鈕提示找不到elements
click button id=carInfoSubmitBtn
改為click element id=carInfoSubmitBtn
4,根據錄入框內容彈出框框,定位不到元素
采用相對路徑的方式定位,用firefox瀏覽器打開地址,按F12獲取元素位置,右擊---選擇復制XPATH
放在腳本中形式為:xpath=/html/body/div[9]/div[2]/table/tbody/tr[4]/td[4]
6,InvalidElementStateException: Message: u'Element must not be hidden, disabled or read-only'
出現這個現象是因為腳本執行快,而頁面的元素還沒有加載完成造成的。
等待頁面加載
wait until page contains element或sleep
7,頁面執行時沒有報錯,但一直停在那里了
利用Mouse out 關鍵字,移開鼠標動作。
8,使用close broswer關閉瀏覽器不起作用
首先安裝pywin32-217.win32-py2.7.exe,再安裝AutoItLibrary庫,在close broswer關鍵字
下一行,增加刪除進線的關鍵字: process close iexplore.exe
10,查看所有有關robot相關庫的版本
pip list
11,通過pip升級庫或程序版本
1,python -m pip install --upgrade pip
報錯:
You should consider upgrading via the 'python -m pip install --upgrade pip' command.
2,根據提示,執行命令
python -m pip install --upgrade pip
報錯:Requirement already up-to-date: pip in c:\python27\lib\site-packages
3,找到c:\python27\lib\site-packages下這個目錄pip-8.1.1.dist-info并刪除,重新執行
python -m pip install --upgrade pip
4,查看是否更新成功
pip list后顯示最新版本
12,利用pip更新庫或RIDE或robot
pip install robotframework-ride --upgrade
再用pip list可以看到升級成功的版本號了
13,Run Keyword And return status關鍵字識別不了
利用pip更新RIDE,robot,selenium2Library
14,ImportError:No module named cx_Oracle
根據連接oracle客戶端的版本如:11G,操作系統是32位還是64位
安裝對應的cx_Oracle安裝包,如:cx_Oracle-5.1.2-11g.win32-py2.7
15,Unable to acquire Oracle environment handle
在oracle客戶端的目錄中把oci.dll,oraocci11.dll,oraociei11.dll文件復制到C:\Python27\Lib\site-packages目錄中
16,日志目錄
Log: d:\users\liujun~1\appdata\local\temp\RIDEwzyfth.d\log.html
Report: d:\users\liujun~1\appdata\local\temp\RIDEwzyfth.d\report.html
17,在IE中如果click不起作用,用如下關鍵字
press key id=kw \13
18,單選框實例
<p class="checkBox">
<input id="registerGenderMale" class="pa_ui_element_normal" type="radio" value="M" name="register.gender" otitle="車主-性別男">
<label class="radiotxt" hidefocus="hidefoces" for="registerGenderMale">男</label>
<input id="registerGenderFemale" class="pa_ui_element_normal" type="radio" value="F" name="register.gender" otitle="車主-性別女">
<label class="radiotxt" hidefocus="hidefoces" for="registerGenderFemale">女</label>
</p>
select radio button register.gender M
19,下拉列表實例
<div class="pa_ui_dropselect_inner paui-clearfix">
<span class="pa_ui_dropselect_input_Container" style="width: 71px;">
<input class="pa_ui_dropselect_input" type="text" readonly="readonly" otitle="V3版-送單地址-縣級市" style="width: 71px; opacity: 1;">
</span>
<span class="pa_ui_dropselect_button" otitle="V3版-送單地址-縣級市">
</div>
select from list class="pa_ui_dropselect_inner paui-clearfix" 江北區
20,通過PIP安裝Selenium2Library報錯
C:\Users\Administrator>pip install Selenium2Library
Collecting Selenium2Library
Could not find a version that satisfies the requir
versions: )
No matching distribution found for Selenium2Library
解決辦法:
pip install robotframework-Selenium2Library
就可以了
21,安裝IEDriver報錯
WebDriverException: Message: 'IEDriverServer.exe' executable needs to be in PATH. Please download fromhttp://selenium-release.storage.googleapis.com/index.html and read up at https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver
解決辦法:
下載對應系統版本的IEDriverServer.exe放在IE的安裝目錄下和Python的根目錄下,并設置PATH。
22,滾動鼠標拖動滾動條到最頂部或最底部
execute javascript id.scrollTop其中id為滾動條區域對應的id,用法:
如:execute javascript J_introCon.scrollTop=0是拖到最頂部,execute javascript J_introCon.scrollTop=100000是拖到最底部
23,在CASE中的setup中可以設置運行CASE前,運行SETUP里面的關鍵字。teardown中可以設置運行CASE后,指定要運行的關鍵字
24,滿足條件結束腳本
exit for loop
如:如果count值為0,則結束CASE
run keyword if ${count}==0 exit for loop
25,執行SQL時報錯:DatabaseError:ORA-00911:Invalid character
去掉SQL后面的 ;
26,執行SQL查詢
Execute sql String select * from 表名
Robot Framework與Web界面自動化測試學習筆記:簡單例子
假設環境已經搭建好了。這里用RIDE( Robot Framework Test Data Editor)工具來編寫用例。下面我們對Robot Framework簡稱rf。
我們先考慮下一個最基本的登錄功能的測試用例。
一、自動化測試與人工測試
在開始編寫用例之前,我們先來思考下自動化測試和人工測試的區別。對于web頁面的人工測試,我們想下,如果去測試,怎么操作呢?不外乎如下的基本動作:
1)打開瀏覽器
2)輸入url (前提web服務器要正常啟動運行著)
3)等待頁面顯示出來
4)用眼睛看頁面顯示的內容是否與自己想象的一致,如果一致,認為功能正常,否則,會認為程序有問題。
5)通過鼠標、鍵盤執行相關的操作,通過頁面的變化和內容顯示繼續進行檢查功能是否正常。
那么什么是自動化測試呢?其本質就是將人的操作過程(打開瀏覽器、輸入url、鼠標點擊、鍵盤輸入等)以及驗收標準(在人腦中驗收)轉換為測試代碼。
有了測試代碼,就可以讓其自動運行了。
二、登錄用例設計
一個登錄功能,想象下如果是人工測試,那基本的測試過程一般如下:
1)打開瀏覽器、輸入登錄url
2)輸入用戶名、密碼(也許還有別的輸入項,如驗證碼,則取決于程序本身),點擊登錄按鈕
3)如果是正確的用戶名密碼,應該出來相應的頁面;如果是錯誤的,應該出來錯誤頁面或錯誤提示信息。
那我們看看利用Robot Framework怎么寫用例。
三、用例編寫
1、成功登陸的用例1
successLogin
open browser http://localhost/nau/login ff
input text id=userid xxx
input password id=password yyy
click button id=loginBtn
Wait Until Element Is Visible id=userid
close browser
下面我們看下上面代碼的含義
1)successLogin是用例名,是自己取的
2)后面的語句,每句都是 “關鍵字+參數(0個或多個)”的格式,其中藍色的詞組就是關鍵字。這個例子的關鍵字是rf框架中的內置關鍵字。
用戶可以定義自己的關鍵字。
open browser http://localhost/nau/login ff
這句代碼的含義,其實看上去就能理解。open browser是關鍵字,表示打開瀏覽器;http://localhost/nau/login 是第一個參數,是要打開的頁面url;ff是第二個參數,代表要用的瀏覽器類型,其中ff表示是firefox瀏覽器,gc表示是chrome瀏覽器,ie表示是Internet Explorer瀏覽器。這里我們用的是firefox瀏覽器。
input text id=userid xxx
這句代碼,input text 是關鍵字,表示要在html組件(如文本框)中輸入信息, id=userid 是 第一個參數,用于定位用來輸入的html組件,這里的id表示通過元素的id來定位,userid就是元素的id值。如果頁面中存在一個id為userid的輸入框,則就能找到。 xxx是第二個參數,表示要輸入的值。想象下,如果是人工操作,就是在界面中找到這個輸入框,敲擊鍵盤輸入xxxx這幾個字符。
看到這里,我們可以把關鍵字當作一個函數(其實它本質上就是一個函數),后面跟的是函數參數,有的關鍵字有參數,有的沒有。
input password id=password yyy
這句代碼,也非常好理解了,就是在密碼框中輸入密碼了。其中input password為關鍵字。
click button id=loginBtn
這句代碼,看上去也明白了,click button 是關鍵字,表示點擊按鈕;id=loginBtn是第一個參數,用于定位要點擊的按鈕,這里也是用id來定位的。
Wait Until Element Is Visible id=userid
前面的幾句代碼,進行的相關的操作,這句代碼就是檢查操作結果。如果登錄成功,會出現新的頁面,并且頁面上應該有個元素會顯示用戶的登錄名。
這里的Wait Until Element Is Visible 是關鍵字,顧名思義,就是等待元素可見; id=userid就是要顯示的元素,這里同樣是通過id定位。
實際上這個檢查是不完善的,這里只是檢查了是否有id為userid的元素,但元素的內容呢(正常內容應該是xxx),沒有檢查。這點我么在下個用例介紹。
close browser
上面是這個用例的最后一個語句。這很好理解了,就是關閉瀏覽器。close browser是關鍵字,該關鍵字沒有參數。
執行該用例。如果系統存在用戶名為xxx和密碼為yyy的用戶,則該用例就會成功。
2、成功登陸用例2
上面是一個最基本的用例。上面用例存在一個問題,就是檢查用例成功的標準是看希望的html元素是否存在。但很多時候不僅需要判斷希望的元素是否存在,還需要判斷元素的內容是否符合預期。就上面這個用例,希望 id為userid的元素的內容是xxx。那用例應該如何寫呢?
successLogin2
open browser http://localhost/nau/login ff
input text id=userid xxx
input password id=password yyy
click button id=loginBtn
${value} get text id=userid
Should Be Equal ${value} xxx
close browser
和上個用例相比,區別就是檢查語句(上面紅色的2行)。
其中${value} get text id=userid的含義是 利用關鍵字 get text 獲取id為userid元素的內容放到變量${value}中。
而 Should Be Equal ${value} xxx 語句,Should Be Equal 是關鍵字,用來斷言兩個參數的值是否相等,如果不等,則表示失敗。
3、失敗登錄用例
上面是驗證成功登錄的用例。那應該也有驗證登錄失敗的用例。其思路差不多,就是當登錄失敗后的頁面是啥。通過代碼來進行檢查。
我們假設登錄失敗后會出現一個新的頁面,頁面中有文本 “用戶名或密碼錯誤”字樣。那么用例就可以這么寫。
errorLogin
open browser http://localhost/nau/login ff
input text id=userid xxx
input password id=password yyy123
click button id=loginBtn
Wait Until Page Contains 用戶名或密碼錯誤
close browser
相比前面的用例,區別還是驗收語句。上面的驗收語句一看就明白,Wait Until Page Contains 是關鍵字,用于檢查頁面中是否包含預期的信息。
4、自定義關鍵字
可以看出,上面3個用例,前面的4個語句,區別只是輸入的參數 用戶名和密碼的值區別,我們自然會想到,可以把這4個語句封裝成一個關鍵字,包含兩個參數用戶名和密碼。
關鍵字定義如下:
login
[Arguments] ${username} ${password}
open browser http://localhost/boot/login ff
input text id=userid ${username}
input password id=password ${password}
click button id=loginBtn
使用該關鍵字的用例如下
loginSuccessWithKeywords
login xxx yyy
${value} get text id=userid
Should Be Equal ${value} xxx
close browser
loginErrorWithKeywords
login xxx yyy123
Wait Until Page Contains 用戶名或密碼錯誤
close browser
5、用例的setup和teardown
每個用例,從整個實現講。一般包括如下三大部分:
1)執行條件設置部分(setup部分):因為用例的執行,通常需要一些條件。如前面的登錄成功用例,需要用戶已經存在。
2)用例執行部分:包括該用例進行的操作,對結果的驗證
3)清理部分(teardown部分):在自動化測試中,我們希望用例執行后,對當前環境不會有任何破壞。因此一般需要做些清理工作,包括第一部分條件設置對系統造成的影響和用例執行過程中對系統造成的影響。
rf對這也提供了支持,可以把一個用例分成三部分。雖然我們寫成一部分,從最終效果上講沒區別。但分開了,會更加符合邏輯,用例也非常清楚。
對于我們這個登錄用例,可以看出,每個用例完成的最后一步都要關閉瀏覽器,這里用的是close browser。
因為各個用例都是公共的,我們可以把這放到用例包的teardown中。
*** Settings ***
Test Teardown close browser
這樣每個用例的最后語句close browser都不需要了。
把一些語句放到teardown中,還有一個好處是,無論用例執行部分出現什么問題,最后的teardown都會保證被執行。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。