2015年9月14日 星期一

在 Windows 7 64 bit 上使用 Sikuli Script

2015/9.15
GUI, 人機介面怎麼測試,發現了好玩的東西~
紀錄一下測試的步驟:
環境: MS Windows 7 64bit


Sikuli (西酷吏, 自己亂翻)
視覺化的程式語法,可以模擬使用者在桌面上用滑鼠跟鍵盤的操作
所以對於我們要用來做測試的話是相當的方便

Step1. 下載軟體 (Windows version):

Java run-time environments:  (必須安裝 Version 6 )
http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html#jre-6u30-oth-JPR

沒有Jave 無法正常使用 Sikuli IDE and Setup.

我偏好免安裝版:
https://launchpad.net/sikuli/sikulix/x1.0-rc3/+download/Sikuli-X-1.0rc3%20%28r905%29-win32.zip

安裝包:
https://launchpad.net/sikuli/sikulix/1.0.1/+download/sikuli-setup.jar



Step2. 安裝執行
解壓縮後執行sikuli-setup.jar
啟動IDE: Sikuli-IDE-w.bat (批次檔的內容必須正確指定到JRE6的路徑)
這邊常見的問題是,啟動Sikuli-IDE後要截圖會失敗,我是看這一篇解決問題滴:
https://bugs.launchpad.net/sikuli/+bug/893772



Step3. 開始Program...



官網:
http://www.sikuli.org/




2013年4月2日 星期二

XSD 簡介, a XML Schema (一)

###  This article is reference to : w3schools.com  ###


XML schema 是用來描述XML的內容

目前有兩種方式來描述XML的內容結構:
     1. DTDs
     2. XML schema (xsd)

XML schema 比 DTD 好,因為schema的擴充性高且支援 Data type

以下是一 XML schema (以下簡稱 xsd ) 範例:

a simple XML name: "note.xml"
<?xml version="1.0"?>
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

這個是上面 note.xml 的 xsd 描述
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="to" type="xs:string"/>
      <xs:element name="from" type="xs:string"/>
      <xs:element name="heading" type="xs:string"/>
      <xs:element name="body" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>

1. 由上可知 xsd 本身也是一個 XML, (用一個XML來描述另一個XML的結構)
2. 可以定義XML中有那些 elements
3. 定義 有哪些 attributes
4. 定義 那些 elements 是 child elements
5. 定義 child element 之間的順序關係
6. 定義 element 的內容是否 empty 或有文字(Text)內容
7. 定義 資料型態(data type)
8. 定義 element 或 attributes 的 default value 或 fixed value


下面這個 XML 內容可以 reference "note.xsd" (加入藍色的部分)
<?xml version="1.0"?>

<note
xmlns="http://www.w3schools.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3schools.com note.xsd">
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>


基本 xsd 框架如下:
<?xml version="1.0"?>

<xs:schema>
...
...
</xs:schema>


<名詞解釋>  simple element / complex element

XSD simple element: 表示這個element 的內容頂多只能是文字,不能有其他element ,不能有其他attribute。

不滿足以上條件的都是 complex element

下面這個範例就是 simple element,  其element 的內容頂多是文字
<lastname>Refsnes</lastname>
<age>36</age>
<dateborn>1970-03-27</dateborn>

下面這個範例,element 有 attribute, 所以他就是 complex type
<lastname lang="EN">Smith</lastname>

如何使用xsd 描述 simple type:
xsd 如下範例:
<xs:element name="lastname" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="dateborn" type="xs:date"/>


<xs:element name="xxx" type="yyy"/>

xxx is name of element
yyy is data type of the element


xsd 有許多內建的 data type, 下面是依些常見的
  • xs:string
  • xs:decimal
  • xs:integer
  • xs:boolean
  • xs:date
  • xs:time

前面有提到 xsd 還可以定義 element 的 default value 或 fixed value
範例如下:
<xs:element name="color" type="xs:string" default="red"/>

<xs:element name="color" type="xs:string" fixed="red"/>


xsd 如何描述 attribute: 範例如下: (和描述 simple type element 很像)
<xs:attribute name="xxx" type="yyy"/>

<xs:attribute name="lang" type="xs:string" default="EN"/>

<xs:attribute name="lang" type="xs:string" fixed="EN"/>

Attribute對於element 來說,有時候是 optional,有時候是 Must
像上面的範例沒特別說明,表示 optional
若是 must
<xs:attribute name="lang" type="xs:string" use="required"/>


************************************************************

我們也可以對 element 或 attribute 的內容做規範限制 (Restrictions)

下面這個範例 我們對 "age" element 的內容作一些 restrictions
<xs:element name="age">
  <xs:simpleType>
    <xs:restriction base="xs:integer">
      <xs:minInclusive value="0"/>
      <xs:maxInclusive value="120"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

age 的base = integer, 最小值 0, 最大值 120


待續...

2013年3月3日 星期日

HTML表單傳送中文字到 PHP + MySQL 問題

最近在學習PHP + MySQL 資料庫碰到以下問題:

用表單傳送中文字到 PHP 網頁中,再將中文字存入MySQL中。

使用phpMyAdmin去看MySQL資料表單,發現文字都無法正確的傳入

中文字的內容都是空的。若改用英文字都沒有這些問題。

初學這些東西,HTML的表單不熟,PHP也不熟,MySQL也不熟,所以這問題還真麻煩。

只好一步一步Debug.

英文字可以傳送,表示整個傳送的機制是對的,但就中文字不行,表示傳中文字時的編碼

可能有問題。這個時候就會想問幾個問題。

   1. 表單是怎麼傳送文字? 機制是如何?編碼方式?
   2. Php在Server端怎麼收到這些文字? 是否有正確收到
   3. Php怎麼把文字寫入資料庫? database 的編碼方式?

把問題列出來後,就開始Google 找答案了:

1. 表單是怎麼傳送文字?

    表單傳送有分 Post 和 Get, 可以用Get method來實驗,因為
Get 方式會將傳送資料顯示網址上,如此我們可知道表單傳了時麼東西出去。
由實驗得知,若表單文字是英文就直接送出,若是中文字會經過編碼再送出。

寫個簡單的表單如下:
<form action="test.php" method="get" >
      請輸入: 
      <input type="text" name="foodName" >
      <input type="text" name="cost" >
      <input type="submit" value ="送出" >
      
</form>

分別送出 "English" 和 "中文" ,送出後得到網址分別如下:

http://127.0.0.1/test2.php?foodName=English&cost=222

http://127.0.0.1/test2.php?foodName=%A4%A4%A4%E5&cost=222

發現上面 "中文" 被編碼成 %A4%A4%A4%E5

修改送出編碼方式如下: (改成utf-8)
<form action="test.php" method="get" accept-charset="utf-8">
      請輸入: 
      <input type="text" name="foodName" >
      <input type="text" name="cost" >
      <input type="submit" value ="送出" > 
</form>

http://127.0.0.1/test.php?foodName=%E4%B8%AD%E6%96%87&cost=222
發現上面 "中文" 被編碼成 %E4%B8%AD%E6%96%87
有明確指定編碼方式,永遠都是比較好的做法。


2. PHP 收到甚麼?

PHP 的資料型態是不需要很嚴謹的定義的,不像C語言有很嚴謹的資料型別定義。
當然這樣各種作法有好有壞拉(本人比較喜歡定義)。上面表單傳過來的東西 PHP
到底會收到甚麼?

$food = $_REQUEST['foodName'];
$cost = $_REQUEST['cost'];     
echo gettype($food) . "<br>";   // $food 讀取其資料型態
echo gettype($cost) . "<br>";   // $cost 讀取其資料型態

使用 gettype() 讀取$food 和 $cost資料型態,可知不管你傳文字還是數字,資料型態都會自動變成string.
由此可知,假設我只單純的把自echo出來,那echo出來的這個網頁所使用的編碼方式
就很重要了,那依舊是必須要能夠匹配的編碼方式才行囉!

<head>
<meta content="text/html; charset=utf-8" http-equiv="content-type">
<title></title>
</head>

所以如果送過來的是採用 UTF-8的編碼方式,這邊網頁就必須採用UTF-8的方式(如上例)
依此類推,big5...都一樣

3. Php怎麼把文字寫入資料庫? database 的編碼方式?

$food = $_REQUEST['foodName'];
$cost = $_REQUEST['cost'];  

$sqlCmd = "insert into menu 
 ( `index`, `foodName`, `cost` ) 
values 
 ( NULL, '{$food} ', {$cost} )";

上面這個PHP code 是把資料寫入資料庫中的語法,基本上沒有甚麼編碼方式的問題
只要網頁的編碼方式正確(第二點)就沒問題了。

但是資料庫的編碼方式就必須注意了。下圖採用phpMyAdmin連線進去我的編碼方式
也是採用utf8


以上這樣應該就都OK了。

我一開始會出現問題是因為
1. 我的表單傳送時並沒有指定編碼方式 (變成default)
2. 我的接收php網頁的編碼方式適用big5

所以中文字就一直有問題。但經過以上的方西調整後,目前都沒問題了。



2013年3月2日 星期六

Windows 7 遠端桌面關機 - 關閉遠端電腦

Windows 7 使用遠端桌面登入到遠端電腦,
使用完畢想要順手把遠端電腦也給關機怎麼做呢?

Solution:

Ctrl + ALT + END ( = 對遠端電腦下達 Ctrl+alt+del  )
此時螢幕右下角有個電源鈕,按下後遠端電腦就會進行關機動作,
此時遠端連線也會中斷 (廢話,都關機了...)

Solution 2:  (這個方法比較簡單)
Alt + F4
此時跳出選單,選擇關機