您好,登錄后才能下訂單哦!
相信大家學習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
助 手
琼海市|
岢岚县|
皮山县|
萍乡市|
咸阳市|
玉门市|
曲靖市|
砚山县|
远安县|
永宁县|
壤塘县|
调兵山市|
乐都县|
洮南市|
姜堰市|
高台县|
新密市|
高碑店市|
成安县|
柳江县|
牟定县|
化隆|
石景山区|
杭州市|
大荔县|
沙田区|
萨迦县|
陇南市|
雅江县|
临高县|
镇远县|
新丰县|
电白县|
兴化市|
台南市|
永安市|
临江市|
庆阳市|
伊金霍洛旗|
竹山县|
崇信县|
|