㈠ 如何寫一個腳本
寫一個腳本從開頭的代碼到結尾的代碼大致寫法 ,可以理解為這是一個基本框架。
工具/原料
叉叉小精靈
方法/步驟
1/3分步閱讀
首先我們要分析 一個游戲需要的功能是什麼 比如十萬個大魔王 需要的是瘋狂點擊以及升級屬性的功能那麼首先第一步就是把我們的ui展示給玩家
yesorno,retuserui=showUI("ui.json");
如何寫ui在前面也有說過 這個yesorno retuserui變數 yesorno則為接受用戶點擊確定還是取消 retuserui是接受用戶選了什麼功能 這個會在另一個番外篇講那麼ui給用戶玩完我們就要判斷他點的是確定還是取消了
if yesorno==0 then
toast("您選擇了取消,停止腳本運行")
lua_exit()
end
yesorno返回0為取消 1為確定 大家可以根據自己需要寫代碼
2/3
那麼判斷完用戶點擊 我們就開始進入腳本了 我們可以在進入前放點toast(消息提示)或者dialog(提示框)放完這些之後呢 我們就要將腳本初始化了 init("0",0) 因為十萬個大魔王是豎屏游戲 所以我們這里寫0那麼初始化完之後 我們就進入功能的代碼了我們的第一個功能很明顯是瘋狂點擊 那麼我們可以封裝一個tap函數
function tap(x, y)
touchDown(1, x, y);
mSleep(20);
touchUp(1, x, y);
end
3/3
大家可能也看到了msleep(20) 延時只有20毫秒 這個是為了快速點擊而選擇的延時 大家要根據手機的性能不同來選擇 不然會出現根本停不下來或手機卡爆的情況但是注意 如果大家需要的是一種非常快速的點擊反應 建議不要封裝函數來點擊 而是直接使用 touchDown和 touchUP寫完上面之後我們就開始點擊屏幕了我們可以通過隨便選一個點 假設為(300,300)這個點那麼我們的調用方法就是tap(300,300)那麼就有人問了 這樣我的腳本只能運行一次呀 只能點擊一次屏幕 那麼這個時候我們就要用到我們的循環代碼了
while(1)
do
tap(300,300)
end
這種代碼情況下就可以一直點擊,直到用戶使用xx助手的停止功能為止。
㈡ UI設計也會設計到腳本和代碼的內容嗎,學起來會不會很難
學ui設計涉及到的代碼還是比較少的,如果有手繪和平面基礎的話學習ui設計還是比較容易的,而且現在有一門叫做UXD的課程,此次全新升級的UXD課程體系,是「UI+UX+UD」的綜合升級版,課程設置新穎,課程內容全面新穎。
基本上不涉及代碼,會有前端代碼的課程,但是不用精通,主要是方便你上下游工作的對接,了解你的下游是怎樣工作的,會更有利於工作的開展,畢竟企業中每個部門都不是獨立的,得保持良好的溝通才能提高效率,愉快的工作。
所以UI設計師學的代碼課程並不難,重在了解,不需要鑽研和精通,也沒有技術性的太多要求,主要是為了方便工作。
㈢ 關於去哪兒網的UI自動化測試腳本及報錯,求高手不吝賜教
盡量少的進行UI的操作,除非是你本身要測試的UI。道理很簡單,UI操作由於可能受各種問題的干擾,很容易失敗。通過非UI的方法去實現是更加可靠和快速的。這也是我為什麼要強調對於高級語言的精通,具有高級語言的開發能力,你就能過把大量的任務從UI操作轉向了程序操作,使得你的自動化程序的可靠性大大的增強。這里還需要強調的一點能力就是系統應用的能力,比如Windows使用的能力。
Windows的很多的操作是有相關的命令來實現的,不一定非得通過大家熟悉的UI。記住這個原則:除非是你要測試的UI,否則盡可能的通過高級語言來實現。
㈣ 如何使用UIAutomation進行iOS 自動化測試
1. 你的第一個UIAutomation測試腳本
UIAutomation的功能測試代碼是用Javascript編寫的。UIAutomation和Accessibility有著直接的關系,你將用到通過標簽和值的訪問性來獲得UI元素,同時完成相應的交互操作。
下面讓我們來編寫我們的第一段測試代碼。
使用iOS模擬器
1. 下載示例應用程序TestAutomation.xcodeproj,並打開它。這個項目是一個很簡單的包含2個tab的tabbar應用程序。
2. 確保選中如下圖所示的「TestAutomation > iPhone 5.0 Simulator」模式(或許你已經切換成5.1了,因此它可能是iPhone5.1模擬器)。
3. 啟動Instruments(Proct > Profile),或者通過⌘I。
4. 選擇左邊的iOS Simulator,然後再選擇Automation模板,然後點擊「Profile」。
5. Instruments就已經啟動好後,然後直接開始錄制了。這里先停止錄制,(紅包按鈕或者⌘R)。
6. 在左邊的Scripts窗口,點擊「Add > Create」創建新的腳本。
7. 在腳本編輯器里,輸入下面的代碼
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
target.logElementTree();
clip_image007[4]
8. 重新運行這段腳本⌘R(不需要保存)。腳本跑起來後,你可以在日誌打完後停止它。
clip_image009[4]
贊一個!我們就這樣完成了我們的第一個UIAutomation測試用例。
使用iOS設備
你除了將你的測試用例運行模擬器上,也可以將它運行在一個真實的設備上。不過,自動化測試用例只能運行在支持多任務的:iPhone 3GS,iPad,iOS > 4.0等設備上。遺憾的是不管iPhone 3G的系統版本是什麼,都不支持。
下面是如何操作:
1. 通過USB介面連接上你的iPhone。
2. 選擇 「TestAutomation > iOS Device」模式。
3. 確保Developper profile設置成Release模式(而不是Ad-Hoc Distribution profile)。默認情況下,profiling是設置成Release模式的(因為沒有必要將profile設置成Debug模式)。
4. 啟動測試
5. 後面的步驟請參考前面模擬器部分。
2. 處理UIAElement和元素可訪問性(Accessibility)
UIAElement層次結構
Accessibility和UIAutomation有密切的聯系:如果一個控制項的Accessibility是可以被訪問的,你就可以設置和讀取它的值,作相關的操作,而當一個控制項的Accessibility不可見時,你就沒有辦法通過automation訪問它。
你可以通過Interface Builder,或者通過在程序里設置isAccessibilityElement屬性的方式來設置一個控制項的Accessibility或者可被自動化。當你設置container view(即:一個視圖包含其它的UIKit元素)的accessibility時,你必須注意。你設置了整個View的accessibility將會「隱藏」它的子視圖的accessibility,例如:在示例項目中,你不能將outlet視圖設置成可訪問的,否則它所有的子控制項將都不可以訪問了。在任何時候,logElementTree都是你忠實的朋友:它將當前界面的所有可被訪問的元素都列印在日誌里。
每一個可以被訪問的UIKit控制項都可以用一個Javascript對象來描述,它就是一個UIAElement。UIAElement有幾個屬性:name, value, elements, parent。你的主窗口包含很多的控制項,它們是以UIKit層次的方式定義的,這些UIKit層次結構對應的是UIAElement的層次樹。例如:前面的測試代碼中,通過調用logElementTree,我們可以得到如下面所示的樹結構:
+- UIATarget: name:iPhone Simulator rect:{{0,0},{320,480}}
| +- UIAApplication: name:TestAutomation rect:{{0,20},{320,460}}
| | +- UIAWindow: rect:{{0,0},{320,480}}
| | | +- UIAStaticText: name:First View value:First View rect:{{54,52},{212,43}}
| | | +- UIATextField: name:User Text value:Tap Some Text Here ! rect:{{20,179},{280,31}}
| | | +- UIAStaticText: name:The text is: value:The text is: rect:{{20,231},{112,21}}
| | | +- UIAStaticText: value: rect:{{145,231},{155,21}}
| | | +- UIATabBar: rect:{{0,431},{320,49}}
| | | | +- UIAImage: rect:{{0,431},{320,49}}
| | | | +- UIAButton: name:First value:1 rect:{{2,432},{156,48}}
| | | | +- UIAButton: name:Second rect:{{162,432},{156,48}}
clip_image001[6]
你可以通過下面的代碼來訪問文本框:
var textField =
UIATarget.localTarget().frontMostApp().mainWindow().textFields()[0];
你可以選擇通過從0開始的索引或者這個元素的名稱來訪問這個元素,例如:你也可以通過下面的代碼來訪問文本控制項。
var textField =
UIATarget.localTarget().frontMostApp().mainWindow().textFields()["User Text"];
後一種方式更加清晰明了,應該多使用。你可以通過Interface Builder設置UIAElement的name屬性,
clip_image002[6]
或者通過編寫代碼的方式:
myTextField.accessibilityEnabled = YES;
myTextField.accessibilityLabel = @"User Text";
你現在可以看到,通過accessibility屬性可以被UIAutomation用來找到不同的控制項。這非常的清晰,因為,第一,你只要學習一個測試框架;第二,通過編寫自動化測試代碼,你同時還可以保證你的程序是可以被訪問的。因此,每一個UIAElement對象的子控制項可以通過下面的方法進行訪問:
buttons(), images(), scrollViews(),textFields(), webViews(), segmentedControls(), sliders(), staticTexts(), switches(), tabBar(),tableViews(), textViews(), toolbar(), toolbars() 等等……
你可以通過如下代碼在tabbar上訪問第一個tab:
var tabBar = UIATarget.localTarget().frontMostApp().tabBar();
var tabButton = tabBar.buttons()["First"];
UIAElement結構層次非常的重要,你以後會常常用到它。而且你還要記住,你可以在隨時通過調用UIAAplication的logElementTree來獲得它的結構。
UIATarget.localTarget().frontMostApp().logElementTree();
在模擬器上,你還可以激活Accessibility 的檢測器。啟動模擬器,找到「Settings > General > Accessibility > Accessibility Inspector」,然後將它設為「打開」狀態。
這個彩色的小框框就是Accessibility 檢測器了。當它收起來的時候,Accessibility就被關閉了,當它展開的時候,Accessibility就是打開的。你只要點擊上面的箭頭按鈕就可以激活或者屏蔽Accessibility。現在,打開我們的示常式序,激活檢測器。
然後,點擊文本框,檢查UIAElement的name和value屬性(其實就是accessibilityLabel和accessibilityValue對應的NSObject類型的值)。這個檢測器可以幫助你調試和編寫你的測試代碼。
模擬用戶操作
讓我們更進一步,模擬一些用戶的交互操作。你可以簡單地調用按鈕的tap()來作一個點擊操作:
var tabBar = UIATarget.localTarget().frontMostApp().tabBar();
var tabButton = tabBar.buttons()["First"];
// Tap the tab bar !
tabButton.tap();
你還可以調用UIAButtons的doubleTap(), twoFingerTap()。如果你不想操作具體的某個元素,你也可以直接根據屏幕上指定的坐標點進行操作,你可以這么用:
UIATarget.localTarget().tap({x:100, y:200});
UIATarget.localTarget().doubleTap({x:100, y:200});
UIATarget.localTarget().twoFingerTap({x:100, y:200});
UIATarget.localTarget().pinchOpenFromToForDuration({x:20, y:200},{x:300, y:200},2);
UIATarget.localTarget().pinchCloseFromToForDuration({x:20, y:200}, {x:300, y:200},2);
拖拽與劃動:
UIATarget.localTarget().dragFromToForDuration({x:160, y:200},{x:160,y:400},1);
UIATarget.localTarget().flickFromTo({x:160, y:200},{x:160, y:400});
注意,當你指定操作的時間間隔的時候,它是有特定的范圍的,即:拖拽操作的時間間隔必須大於或者等於0.5秒,小於60秒。
現在,讓我們來練習一下:
停止Instruments (⌘R)
在Scripts窗口裡, 移除當前的腳本
點擊「Add > Import」然後選擇TestAutomation/TestUI/Test-1.js(將下面的代碼保存到這個路徑)
點擊錄制按鈕 (⌘R) 然後看看將會發生什麼…
下面是Test-1.js代碼:
var testName = "Test 1";
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
UIALogger.logStart( testName );
app.logElementTree();
//-- select the elements
UIALogger.logMessage( "Select the first tab" );
var tabBar = app.tabBar();
var selectedTabName = tabBar.selectedButton().name();
if (selectedTabName != "First") {
tabBar.buttons()["First"].tap();
}
//-- tap on the text fiels
UIALogger.logMessage( "Tap on the text field now" );
var recipeName = "Unusually Long Name for a Recipe";
window.textFields()[0].setValue(recipeName);
target.delay( 2 );
//-- tap on the text fiels
UIALogger.logMessage( "Dismiss the keyboard" );
app.logElementTree();
app.keyboard().buttons()["return"].tap();
var textValue = window.staticTexts()["RecipeName"].value();
if (textValue === recipeName){
UIALogger.logPass( testName );
}
else{
UIALogger.logFail( testName );
}
這段腳本先啟動待測程序,然後,如果第一個tab沒有被選的話就切換到第一個tab,並將上面的文本框的值設成「Unusually Long Name for a Recipe」,接著收起虛擬鍵盤。這里有一些新的方法值得注意的:UIATarget的delay(Number timeInterval) 方法允許你在兩個操作之間做一些等待,UIALogger的logMessage( String message) 方法用來將你想列印的信息輸出到日誌上去,UIALogger的logPass(String message)方法指明你的測試腳本已經成功的完成測試了。
你還知道了如何訪問鍵盤上的按鈕,然後作點擊操作:
app.keyboard().buttons()["return"].tap();
㈤ 如何使用UIAutomation進行iOS自動化測試
使用iOS模擬器
1. 下載示例應用程序TestAutomation.xcodeproj,並打開它。這個項目是一個很簡單的包含2個tab的tabbar應用程序。
2. 確保選中如下圖所示的「TestAutomation > iPhone 5.0
Simulator」模式(或許已經切換成5.1了,因此它可能是iPhone5.1模擬器)。
3. 啟動Instruments(Proct > Profile),或者通過⌘I。
4. 選擇左邊的iOS Simulator,然後再選擇Automation模板,然後點擊「Profile」。
5. Instruments就已經啟動好後,然後直接開始錄制了。這里先停止錄制,(紅包按鈕或者⌘R)。
6. 在左邊的Scripts窗口,點擊「Add > Create」創建新的腳本。
7. 在腳本編輯器里,輸入下面的代碼
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
target.logElementTree();
8. 重新運行這段腳本⌘R(不需要保存)。腳本跑起來後,可以在日誌打完後停止它。
贊一個!就這樣完成了第一個UIAutomation測試用例。
使用iOS設備
除了將測試用例運行模擬器上,也可以將它運行在一個真實的設備上。不過,自動化測試用例只能運行在支持多任務的:iPhone 3GS,iPad,iOS
> 4.0等設備上。遺憾的是不管iPhone 3G的系統版本是什麼,都不支持。
下面是如何操作:
1. 通過USB介面連接上iPhone。
2. 選擇 「TestAutomation > iOS Device」模式。
3. 確保Developper profile設置成Release模式(而不是Ad-Hoc Distribution
profile)。默認情況下,profiling是設置成Release模式的(因為沒有必要將profile設置成Debug模式)。
4. 啟動測試 (⌘I)
5. 後面的步驟請參考前面模擬器部分
㈥ 初學UI設計要知道的4種UI交互設計技巧
初學UI設計要知道的4種UI交互設計技巧,今天北大青鳥UI設計培訓就來跟大家分享下篇文章,交互是設計中經常會遇到的,好的交互可以給用戶帶來好的體驗,反之則亦然。今天跟大家分享的這篇文章梳理了4種常用的交互方法希望對你有所幫助。
一、展示用戶位置、進度的視覺反饋
讓用戶知道自己在哪:沒有人會喜歡迷失方向,但是無論在現實生活還是在數字領域當中,這種情況都會發生。讓用戶知道他們在哪裡是創建良好導航體驗的關鍵。應用程序和網站都應該凸顯當前的導航選項,幫助用戶了解他們所在的位置。
要經過多少步驟來完成任務:這也是一個非常基本的操作,通過展現步驟數量,幫助用戶來預估完成這個過程所需要的時間。
二、 輔助用戶交互的視覺反饋
數字界面畢竟不是現實世界中的真實硬體機構,用戶更多隻能藉助交互過程中的即時視覺反饋來確定是否完成了操作,即時的視覺反饋因此顯得非常重要。即時的視覺反饋讓用戶的操作得到了視覺上的「認可」,從而強化了「確信感」,這樣一來一回的確認可以避免錯誤的發生,比如可以避免用戶因為「感覺沒有點下去」而反復點擊。但是在某些狀況下,按鈕的視覺反饋還有很多不同的呈現形式,有更多可見的、可理解的新形態,可以在原有的基礎上探索更多可能性。
三、呈現系統狀態的視覺反饋
系統正忙於什麼事情當系統正在載入,正在執行,正在運行的過程中,通過動效來告知用戶系統並沒有停止,而是正忙於執行某件事情,是避免用戶誤解的手段。在用戶等待的過程中,通常會使用無限載入的動效(一般使用在低於10s的操作中)對於超過10s的更長的執行過程,無限載入的動效會顯得令人沮喪,這個時候使用進度條會更好。
四、觸發事件
通知和提醒:有效的通知和提醒,能幫用戶意識到有新的事情正在發生。在多數時候,我們建議設計師使用微妙的動畫來進行通知,因為動畫效果會自然地吸引用戶的注意力,人類的雙眼的動態視覺其實是非常強的。
提示用戶採取行動:在很多情況下,用戶界面中會有很多地方會需要用戶提交信息。比如,需要用戶提交表單,或者用戶創建了一個密碼,但是在復雜度上不足需要修正,或者填寫郵箱來訂閱信息的時候,郵箱格式出錯,等等。使用適當的視覺反饋總能夠更加有效地將問題告知用戶。
「轉行UI設計師,要從哪方面入手?」希望能幫助到你。今天就跟大家分享到這里,更多UI培訓問題,點擊【UI常見問題】進行了解資訊;了解更多UI教程知識,點擊【UI知識教程】進查看;了解更多UI面試及職場問題,點擊【UI職場】進入查看。
【免責聲明】本文部分系轉載,轉載目的在於傳遞更多信息,並不代表本網贊同其觀點和對其真實性負責。如涉及作品內容、版權和其它問題,請在30日內與聯系我們,我們會予以更改或刪除相關文章,以保證您的權益
㈦ 按鍵精靈做一個帶UI的小程序
首先自己先寫一個腳本,我們將這個腳本弄個小程序。
㈧ uiautomator怎麼執行shell腳本
你使用的應該是是uiautomator1.0,可以使用Runtime來實現執行shell腳本
Runtime.getRuntime().exec("ls -l /sdcard/").waitFor()
㈨ 插件和UI
UI的內容涉及到一些腳本語言和XML文檔的知識,編寫腳本的語言是LUA.
不行,還得轉,要打的字太多了,我給你找個去。
(以下是轉來的)
1.准備開始
A.可以選用的工具
第一步必須明白將要做些什麼,但是為了能夠正確的開始,我們必須選擇一些編寫腳本的工具。我想首先重要的一點是編輯器(用專業術語來說就是IDE-integrated development evironment), 這可能有許多種選擇。由於我們編寫腳本的語言是LUA(譯註:一種腳本語言,參見:http://www.lua.org),我們需要的編輯器應當是針對這種語言的,以下十供選擇的列表:
http://blua.sourceforge.net/ (譯註:sourceforge.net是一個著名的開源項目網站)
B:Lua – 這是首當其充的腳本編輯工具之一,它提供了強大的IDE所提供的功能,足夠用來編輯WOW的UI。而且它是用Java語言編寫的,不論在何種操作系統中尼都能運行它。
http://www.ideais.com.br/luaeclipse/ (譯註:一個運用於Eclipse IDE下的插件,建議使用過Java語言的專業人士使用。)
Lua Eclipse – 這是另外一個Java環境的IDE,我沒有用過這個IDE(譯註:本文中的我不代表譯者),它基於Eclipse 平台(譯註:請參見http://www.eclipse.org),它是一個有著多種功能的插件,我確信這是一個很好的工具。
http://editplus.com/ (譯註:editPlus是類似於UltraEdit的文本編輯器)
EditPlus – 這是替代記事本程序的有效工具,這也是我編輯LUA的工具。它有著多種你所需的功能,而且它有著LUA語言的Schema(譯註:Schema可以理解為一種模板,它規定者文件如何定義等內容)。但是它有著30天的評估期,你得注冊擁有它。
這只是3種建議,我認為一旦掌握了B:Lua後,你就能夠更好地使用其它工具了。
B.目標:WOW文件
你擁有了編輯器後,一切只是剛剛開始,我們需要一些工具來編輯WOW。首選的工具是WinMPQ,下載地址:http://shadowflare.gameproc.com/dwnload.html#WinMPQ
你需要運行庫(VB4運行庫)來運行它(譯註:一般windows都安裝了),有了它你就可以打開游戲目錄中的MPQ文件或者MoPaO 文件。MPQ是暴雪公司存儲游戲資料的文件格式,如果你有興趣研究的話,請參閱:http://www.campaigncreations.org/starcraft/inside_mopaq/index.htm
有了WinMPQ,你就可以解開文件內容,並且打包到游戲安裝目錄。
Interface.mpq文件裡面有基本的界面數據,並且有著大量柯作為例子的文件。Patch.mpq文件里有著所有的補丁內容,在游戲運行時將覆蓋所有基礎的文件。打開WinMpq,我們將所有基礎界面文件作為例子來使用。下面還將示範如何保證數據與最新的補丁保持一致。使用「Open」選項打開interface.mpq文件(該文件在游戲安裝目錄下),找到一個叫FrameXML的文件夾(還有一個叫glueXML的文件夾,不去管它),選中目錄下所有文件並且解壓到游戲安裝以外的目錄下。同樣,打開Patch.mpq,其中不僅僅有界面文件,還有許多更新文件。打開Interface\FrameXML目錄,將其中的內容解壓到剛才interface.mpq文件的解壓目錄中,並覆蓋已有的文件。這樣我們就有了一份最新的游戲界面FrameXML目錄數據作為參考。(你也可以用WinMPQ 解壓其他的文件,例如音樂文件等)。
2.有了目標之後
一切准備就緒,讓我們開始製作第一個插件吧!
首先你的知道具體文件的安排,哪個文件是做什麼的。讓我們看以下魔獸世界的安裝吧。其中有許多目錄,我們將要操作的目錄是Interface目錄(若不存在請創建)。在該目錄下有3個主要的目錄:
FrameXML: 有所有暴雪提供的界面,你將打交道的文件都在這。
GlueXML: 包含「游戲之外」的界面,例如登入界面,伺服器選擇,角色創建等。你不太需要關心這些文件。
AddOns: 所有游戲角色的模型。
在AddOns目錄下每個角色都有其所有的目錄並且有一個內容表。
3.開動!
A.初始化
我們要開始創建「Hello world」啦!(譯註:「Hello world」常指第一個程序),創建1個叫hello_world的目錄在AddOns下,即Warcraft/Interface/AddOns/hello_world。在目錄中建立1個叫hello_world.toc的文件,這就是內容表了,它定義了WOW該如何裝載插件內容。例如以下就是文件內容:
## Interface: 4114
## Title: Hello World
## Notes: The obligatory hello world script – WoW-style!
## OptionalDeps:
## Dependencies:
hello_world.xml
作一下解釋,第一行表示新的代碼段的開始。事實上每次暴雪更新補丁後,當前的版本號都會更新。如果你的腳本沒有最新的版本號,那麼這段腳本將「不會」裝載入游戲。這就是為什麼版本更新導致插件無法使用的原因。你可以通過打開Interface\FrameXML\FrameXML.toc文件來知道當前的版本號。接下來兩行的Title和Nodes就不必解釋了吧(譯註:分別為標題和註解,可選)。在下一行,OptionalDeps中你可以列出所有你的插件的名稱(你可以列出其他插件,用空格分隔)。Dependencies也是同樣的,但它不是可選的,我不太確定如果沒有這一行你的插件是否會裝載。最好所有的都寫,不管它是不是可選的,這樣所有人都能更好閱讀你的代碼。
在開始的聲明之後,你將寫入一些XML文件的名稱(次序未定),一行寫一個文件的名稱。你也可以將XML文件寫在子目錄中,例如「core/hello_world.xml」,這樣能使文件夾里看起來更簡潔。
Interface.mpq文件裡面有基本的界面數據,並且有著大量柯作為例子的文件。Patch.mpq文件里有著所有的補丁內容,在游戲運行時將覆蓋所有基礎的文件。打開WinMpq,我們將所有基礎界面文件作為例子來使用。下面還將示範如何保證數據與最新的補丁保持一致。使用「Open」選項打開interface.mpq文件(該文件在游戲安裝目錄下),找到一個叫FrameXML的文件夾(還有一個叫glueXML的文件夾,不去管它),選中目錄下所有文件並且解壓到游戲安裝以外的目錄下。同樣,打開Patch.mpq,其中不僅僅有界面文件,還有許多更新文件。打開Interface\FrameXML目錄,將其中的內容解壓到剛才interface.mpq文件的解壓目錄中,並覆蓋已有的文件。這樣我們就有了一份最新的游戲界面FrameXML目錄數據作為參考。(你也可以用WinMPQ 解壓其他的文件,例如音樂文件等)。
2.有了目標之後
一切准備就緒,讓我們開始製作第一個插件吧!
首先你的知道具體文件的安排,哪個文件是做什麼的。讓我們看以下魔獸世界的安裝吧。其中有許多目錄,我們將要操作的目錄是Interface目錄(若不存在請創建)。在該目錄下有3個主要的目錄:
FrameXML: 有所有暴雪提供的界面,你將打交道的文件都在這。
GlueXML: 包含「游戲之外」的界面,例如登入界面,伺服器選擇,角色創建等。你不太需要關心這些文件。
AddOns: 所有游戲角色的模型。
在AddOns目錄下每個角色都有其所有的目錄並且有一個內容表。
3.開動!
A.初始化
我們要開始創建「Hello world」啦!(譯註:「Hello world」常指第一個程序),創建1個叫hello_world的目錄在AddOns下,即Warcraft/Interface/AddOns/hello_world。在目錄中建立1個叫hello_world.toc的文件,這就是內容表了,它定義了WOW該如何裝載插件內容。例如以下就是文件內容:
## Interface: 4114
## Title: Hello World
## Notes: The obligatory hello world script – WoW-style!
## OptionalDeps:
## Dependencies:
hello_world.xml
作一下解釋,第一行表示新的代碼段的開始。事實上每次暴雪更新補丁後,當前的版本號都會更新。如果你的腳本沒有最新的版本號,那麼這段腳本將「不會」裝載入游戲。這就是為什麼版本更新導致插件無法使用的原因。你可以通過打開Interface\FrameXML\FrameXML.toc文件來知道當前的版本號。接下來兩行的Title和Nodes就不必解釋了吧(譯註:分別為標題和註解,可選)。在下一行,OptionalDeps中你可以列出所有你的插件的名稱(你可以列出其他插件,用空格分隔)。Dependencies也是同樣的,但它不是可選的,我不太確定如果沒有這一行你的插件是否會裝載。最好所有的都寫,不管它是不是可選的,這樣所有人都能更好閱讀你的代碼。
在開始的聲明之後,你將寫入一些XML文件的名稱(次序未定),一行寫一個文件的名稱。你也可以將XML文件寫在子目錄中,例如「core/hello_world.xml」,這樣能使文件夾里看起來更簡潔。
B.加入內容
下面將是最有意思的部分,讓我們從簡單的開始。在目錄中創建hello_world.xml文件(該文件名應寫在了FrameXML.toc中),內容如下:
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/">
<Script file="hello_world.lua"/>
<!-- Frame to handle all core events -->
<Frame name="hello_world_core">
<Scripts>
<OnLoad>
this:RegisterEvent("VARIABLES_LOADED");
</OnLoad>
<OnEvent>
if (event == "VARIABLES_LOADED") then
hello_world_initialize();
end
</OnEvent>
</Scripts>
</Frame>
</Ui>
哦。有些復雜了是么?其他不用管先看<Script file="hello_world.lua"/>這一行,它告訴游戲 hello_world.lua 是腳本文件,也就是插件運行的腳本所在。每個界面都用<Frame>的標簽(Tag)擴起來。這里我們使用了一個Frame標簽來簡單地把所有事件腳本包進來,你也可以將所有的界面上的按鈕,窗口等定義在Frame標簽裡面。在<Frame>標簽里,可以定義其一個叫name的屬性(如:<Frame name="hello_world_core">)
注意裡面的值必須在整個文件里是唯一的。建議你用你的插件模塊名稱作為前綴開始,後接下劃線,再接上Frame真正意義的名稱。在上面的例子里,我們把它叫做core,因而組成了上述名字。
在<Frame>標簽里有個<Script>標簽,其中是真正腳本的內容。在這里有許多事件(譯註:即魔獸世界游戲程序在某階段將做的某個動作),其中 <OnLoad> 和<OnEvent>是最常用的2個。其中<OnLoad>是當你選擇了角色進入游戲時而角色Laoding畫面開始之前的將響應的事件(換句話說,你的插件在登入畫面時是不會被裝載的)。在我們的代碼中,我們注冊了this給了一個叫「VARIABLES_LOADED」的事件(譯註:看不懂代碼的朋友還是先看看一些腳本語言的介紹書籍),this代表了當前的Frame,即這個名字叫hello_world_core的Frame,this就是指向該Frame的對象/變數(指向該Frame對象的實例),這里的「:」相當於引用方法的表達符(像其他某些腳本語言中的」.」 號),而RegisterEvent函數的作用是告訴游戲程序在VARIABLES_LOADED事件發生時(VARIABLES_LOADED是游戲內定義的事件)通知你定義的Frame。說到這里又得說說<OnEvent>這個標簽了,在其中有一個默認的變數event,它的值就是當前游戲里產生的事件的名稱(就好比上面的VARIABLES_LOADED)。
(譯註: 真的是要了解編程的了哦。 這里處理事件就類似Win32處理事件的代碼模式,可以用if(event=事件名稱){操作代碼}else if(event=事件名稱2){操作代碼}…..或者 switch case的方式來完成。)
現在,暴雪提供了存儲變數的方法,你可以用RegisterForSave(「variable_name」)的方法來定義一個變數在游戲過程中。
在我們的例子中,當VARIABLES_LOADED發生後,將調用hello_world_initialize()函數來處理。對啦,這個hello_world_initialize()函數還沒定義呢,下面就介紹如何定義函數。
C. 補完 (譯註:寫代碼的部分,會寫腳本的人一定看得懂,不會寫的需要學習:<)
好了,現在是真正要寫代碼的時候了。創建1個叫作hello_world.lua的文件。內容如下:
function hello_world_initialize()
-- add our very first chat command!
SlashCmdList["HELLOW"] = hello_world_command;
SLASH_HELLOW1 = "/hellow";
SLASH_HELLOW2 = "/hw";
end
function hello_world_command(msg)
-- this function handles our chat command
message(msg);
end
這里我不想對語法做出解釋,如果不懂請看LUA的文檔,那裡會詳細地介紹。參見:http://www.lua.org/manual/5.0/
注意這里系統的I/O 庫文件,操作系統的庫文件沒有包含在魔獸世界UI的PATH路徑之中。至於暴雪定義的函數(內置的)和事件,你可以在Cosmos網站上找到,參閱:http://www.cosmosui.org/texts/BlizzardCommands.xml
回到代碼,在我們的函數中,我們定義了1個聊天用的命令。似乎我們的代碼看起來挺怪的,是的,我們是直接修改了SlashCmdList這個表,其作用是當我們輸入宏「/hellow 消息」 或者「/hw 消息」是會調用hello_world_command()函數,(至於游戲內部如何這種關系做映射不在本文討論范圍內)然後玩家看到打出「消息」的聊天信息的窗口(譯註:事實上是msg()函數創建的窗口)。可以看到「消息」作為參數傳遞給了hello_world_command()函數。
以上所有做的就是一個簡單的插件,它加入了兩條命令(宏)。如果你想測試它,進入游戲,輸入/console reloai(重新載入UI),在登入游戲後的聊天框中輸入「/hellow Why hello there!」,你會看到游戲中彈出一個消息框,消息是「Why hello there!」。
4.完成
(以上是轉來的)
還有不少資料:www.lua.org/manual/5.0/,暴雪定義的函數www.cosmosui.org/texts/BlizzardCommands.xml。另外,試著看看Interface/FrameXML/BasicControls.xml文件,裡面有不少操控語句;還有Font.xml文件,你可以定義自己的字體,顏色等。自己研究吧。
㈩ soapui中的groovy腳本怎麼寫
下載並安裝 SoapUI 的免費版本.
當你第一次運行時,看起來像下面這樣:
我創建了一個工作空間存儲我的項目,叫做 Automation. 為此,我們要去選擇 『File』-> 『New Soap Project』 ,填入項目名稱和web服務的.wsdl 文件位置.
請確保你勾選了創建請求 'Create Requests' 和創建測試套件 'Create TestSuite', 然後點擊 'OK'.
SoapUI 將會檢查web服務,返回你可以在服務上調用的操作/方法. 在我的任務中,只有一個叫做SubmitRequestResponse的操作, 但我還是選擇了 'Single TestCase with One Request for Each Operation'.
點擊 'OK' 而你將會收到提醒,告知要為Test SuiteMultiple命名.
現在當SoapUI已經設置好了項目, 展開整個項目結構如下:
如果你在 Request 1 上單擊, 你可以看到一個基礎的請求格式.
LeoXu
翻譯於 5個月前
0人頂
頂 翻譯的不錯哦!
我們需要在繼續進行之前確保調用從web服務上獲得了一個響應,所以我們添加一個soap請求。在我的情況里,web服務需要一個客戶號跟著一個地點位置標簽跟著一個或多個SalesOrders。所以我在 body 中用我的soap請求替換<part>?</part>標簽。
點擊綠色箭頭(左上方)然後你將獲得一個XML響應。
如果你有響應,那麼你就在你需要在的地方。