您好,登錄后才能下訂單哦!
相信大家學習UIAutomator一開始的時候必然會看過一下這篇文章。
因為你在百度輸入UIAutomator搜索的時候,該文章是排在第一位的。
但是里面有一段說法說UIAutomator不能支持通過中文文本查找控件,這個說法害人不淺,如果不是自己去實踐調查過,必然也會輕易放棄UIAutomator以及使用了它的Appium框架,因為本人現在工作上將要測試到的就是全部中文界面的app。
最為害人的還是文章中用紅色高亮來標志說明這個問題,雖然文章中有評論指出UIAutomator其實是支持中文搜索控件的,但我相信很多人會像我一樣一般技術文章只會看正文的。
做完我自己親自去編寫以下代碼去驗證這個問題,以下代碼的重點主要是最后幾行想通過中文來查找控件(假設該控件已經存在)
package majcit.com.UIAutomatorDemo; import com.android.uiautomator.core.UiDevice; import com.android.uiautomator.core.UiObject; import com.android.uiautomator.core.UiObjectNotFoundException; import com.android.uiautomator.core.UiScrollable; import com.android.uiautomator.core.UiSelector; import com.android.uiautomator.testrunner.UiAutomatorTestCase; import static org.hamcrest.Matchers.*; import static org.hamcrest.MatcherAssert.assertThat; public class NotePadTest extends UiAutomatorTestCase { public void testDemo() throws UiObjectNotFoundException { UiDevice device = getUiDevice(); device.pressHome(); // Start Notepad UiObject appNotes = new UiObject(new UiSelector().text("Notes")); appNotes.click(); //Sleep 3 seconds till the app get ready try { Thread.sleep(3000); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //Evoke the system menu option device.pressMenu(); UiObject addNote = new UiObject(new UiSelector().text("Add note")); addNote.click(); //Add a new note UiObject noteContent = new UiObject(new UiSelector().className("android.widget.EditText")); noteContent.clearTextField(); noteContent.setText("Note 1"); device.pressMenu(); UiObject save = new UiObject(new UiSelector().text("Save")); save.click(); //Find out the new added note entry UiScrollable noteList = new UiScrollable( new UiSelector().className("android.widget.ListView")); //UiScrollable noteList = new UiScrollable( new UiSelector().scrollable(true)); UiObject note = null; if(noteList.exists()) { note = noteList.getChildByText(new UiSelector().className("android.widget.TextView"), "Note1", true); //note = noteList.getChildByText(new UiSelector().text("Note1"), "中文筆記", true); } else { note = new UiObject(new UiSelector().text("中文筆記")); } assertThat(note,notNullValue()); note.longClick(); UiObject delete = new UiObject(new UiSelector().text("Delete")); delete.click(); } }運行的時候也確實碰到了如下的問題:
當時看到log說"UiOjbectNotFoundException"的時候第一反應就是以上博客高亮指出的問題,以為確實如作者所說的存在這樣的問題。但自己換個角度想,這個UIAutomator是google弄的,不可能對unicode字符支持這么基礎的東西都有問題啊,所以幾經百度谷歌和詢問,可憐網上UIAutomator與此相關的資源有如鳳毛麟角,幾經艱辛才知道這個跟eclipse項目的Text file encoding選項有關系。現在往回想起,以上圖片出現亂碼的時候其實不應該先先入為主的認為引用博客的作者的說法是正確的,而應該像一網友“小吉”所說的應該先考慮是否是代碼文件的編碼的問題。
如下圖,把項目默認的Text file encoding從GBK改成UTF-8,重新打包運行
作者 | 自主博客 | 微信 | CSDN |
天地會珠海分舵 | http://techgogogo.com | 服務號:TechGoGoGo 掃描碼:
| 向AI問一下細節 免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。 猜你喜歡最新資訊相關推薦相關標簽AI
助 手
五指山市|
德安县|
册亨县|
新竹市|
宿松县|
江华|
淮南市|
青河县|
嵊泗县|
南召县|
民勤县|
大余县|
双峰县|
天等县|
宜川县|
固始县|
江门市|
常宁市|
博野县|
衢州市|
浪卡子县|
新蔡县|
墨脱县|
望都县|
丹东市|
仪征市|
应城市|
昌乐县|
富宁县|
嘉禾县|
宜春市|
同江市|
浦江县|
千阳县|
洛宁县|
仙居县|
长岛县|
民丰县|
六枝特区|
洪洞县|
耿马|
|