为网上流行论点“UIAutomator不能通过中文文本查找控件”正名

本文通过实际案例,详细解析了使用UIAutomator进行中文文本查找时遇到的问题及解决方案,强调了编码设置的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转:http://blog.youkuaiyun.com/zhubaitian/article/details/39718195


1. 问题描述和起因

相信大家学习UIAutomator一开始的时候必然会看过一下这篇文章。

因为你在百度输入UIAutomator搜索的时候,该文章是排在第一位的。

但是里面有一段说法说UIAutomator不能支持通过中文文本查找控件,这个说法害人不浅,如果不是自己去实践调查过,必然也会轻易放弃UIAutomator以及使用了它的Appium框架,因为本人现在工作上将要测试到的就是全部中文界面的app。


最为害人的还是文章中用红色高亮来标志说明这个问题,虽然文章中有评论指出UIAutomator其实是支持中文搜索控件的,但我相信很多人会像我一样一般技术文章只会看正文的。

2. 问题分析

做完我自己亲自去编写以下代码去验证这个问题,以下代码的重点主要是最后几行想通过中文来查找控件(假设该控件已经存在)

[java]  view plain  copy
  1. package majcit.com.UIAutomatorDemo;  
  2.   
  3. import com.android.uiautomator.core.UiDevice;  
  4. import com.android.uiautomator.core.UiObject;  
  5. import com.android.uiautomator.core.UiObjectNotFoundException;  
  6. import com.android.uiautomator.core.UiScrollable;  
  7. import com.android.uiautomator.core.UiSelector;  
  8. import com.android.uiautomator.testrunner.UiAutomatorTestCase;  
  9. import static org.hamcrest.Matchers.*;  
  10. import static org.hamcrest.MatcherAssert.assertThat;  
  11.   
  12. public class NotePadTest extends UiAutomatorTestCase {  
  13.       
  14.      public void testDemo() throws UiObjectNotFoundException {    
  15.             UiDevice device = getUiDevice();  
  16.             device.pressHome();    
  17.             // Start Notepad  
  18.             UiObject appNotes = new UiObject(new UiSelector().text("Notes"));   
  19.             appNotes.click();    
  20.             //Sleep 3 seconds till the app get ready  
  21.             try {    
  22.                 Thread.sleep(3000);    
  23.             } catch (InterruptedException e1) {    
  24.                 // TODO Auto-generated catch block    
  25.                 e1.printStackTrace();    
  26.             }    
  27.               
  28.             //Evoke the system menu option  
  29.             device.pressMenu();  
  30.             UiObject addNote = new UiObject(new UiSelector().text("Add note"));  
  31.             addNote.click();  
  32.               
  33.             //Add a new note  
  34.             UiObject noteContent = new UiObject(new UiSelector().className("android.widget.EditText"));  
  35.             noteContent.clearTextField();  
  36.             noteContent.setText("Note 1");  
  37.             device.pressMenu();  
  38.             UiObject save = new UiObject(new UiSelector().text("Save"));  
  39.             save.click();  
  40.               
  41.             //Find out the new added note entry  
  42.             UiScrollable noteList = new UiScrollable( new UiSelector().className("android.widget.ListView"));    
  43.             //UiScrollable noteList = new UiScrollable( new UiSelector().scrollable(true));   
  44.             UiObject note = null;  
  45.             if(noteList.exists()) {  
  46.                 note = noteList.getChildByText(new UiSelector().className("android.widget.TextView"), "Note1"true);    
  47.                 //note = noteList.getChildByText(new UiSelector().text("Note1"), "中文笔记", true);   
  48.             }  
  49.             else {  
  50.                 note = new UiObject(new UiSelector().text("中文笔记"));  
  51.             }  
  52.             assertThat(note,notNullValue());  
  53.               
  54.             note.longClick();  
  55.               
  56.             UiObject delete = new UiObject(new UiSelector().text("Delete"));  
  57.             delete.click();  
  58.                 
  59.         }    
  60.   
  61. }  
运行的时候也确实碰到了如下的问题:


当时看到log说"UiOjbectNotFoundException"的时候第一反应就是以上博客高亮指出的问题,以为确实如作者所说的存在这样的问题。但自己换个角度想,这个UIAutomator是google弄的,不可能对unicode字符支持这么基础的东西都有问题啊,所以几经百度谷歌和询问,可怜网上UIAutomator与此相关的资源有如凤毛麟角,几经艰辛才知道这个跟eclipse项目的Text file encoding选项有关系。现在往回想起,以上图片出现乱码的时候其实不应该先先入为主的认为引用博客的作者的说法是正确的,而应该像一网友“小吉”所说的应该先考虑是否是代码文件的编码的问题。

3.解决方案

如下图,把项目默认的Text file encoding从GBK改成UTF-8,重新打包运行


<think>好的,我现在需要解决用户的问题:“如何根据文档内容生成硕士论文论点树”。用户之前已经询问过论点树的构建方法,现在他们更关注如何基于具体文档内容来生成。 首先,我应该回顾之前的回答,确保这次的内容不重复,但更侧重于文档分析。用户可能已经了解基本步骤,现在需要具体的文档处理方法。 用户的需求可能包括如何从文档中提取核心论点、分解子论点,以及如何整合数据。需要强调文档分析的具体方法,比如文本挖掘、主题模型,或者自然语言处理技术。这些技术能帮助用户从大量文献中自动提取关键点。 接下来要考虑结构设计部分。之前提到了纵向和横向分解,现在需要结合文档内容,比如使用TF-IDF或LDA模型来识别主题,作为子论点的基础。可能需要提供代码示例,比如Python的sklearn库来实现这些分析,这样用户可以直接应用。 逻辑验证部分,用户可能需要检查从文档中提取的论点是否逻辑一致。可能需要引入NLP工具进行逻辑关系分析,或者使用决策树、规则引擎来自动检测矛盾。这里可以引用具体的库或工具,比如NLTK或spaCy。 可视化工具方面,除了之前提到的,可能需要推荐更多与文档分析集成的工具,比如VOSviewer用于文献网络分析,或者Gephi结合文本数据生成图形。这些工具能帮助用户将分析结果可视化。 还要注意用户可能的深层需求:他们可能希望自动化生成论点树,节省时间。因此,提供代码片段和具体工具步骤会更有帮助。同时,确保每个步骤都紧密围绕文档内容,比如如何从PDF或文本中提取信息,如何处理不同格式的文档。 最后,生成相关问题时要基于当前回答,比如询问具体的技术实现细节,如何处理多语言文档,或者评估模型效果的方法。确保问题具有连续性,帮助用户深入探索。</think>根据文献分析与论文写作方法论,基于文档内容构建硕士论文论点树需遵循系统化处理流程。下列方法整合了文本挖掘技术与学术写作规范: **文档语义解析** - 实施TF-IDF算法提取高频核心概念: ```python from sklearn.feature_extraction.text import TfidfVectorizer corpus = [doc1, doc2, doc3] # 预处理后的文档集合 vectorizer = TfidfVectorizer(max_features=50) X = vectorizer.fit_transform(corpus) ``` - 运用LDA主题模型识别潜在论点维度: $$p(z|d) = \frac{p(d|z)p(z)}{p(d)}$$ 其中$z$表示主题,$d$代表文档 **论点层级建模** 1. 构建三元组关系图谱: - 主体(Subject)- 谓词(Predicate)- 客体(Object) - 使用Stanford OpenIE提取语义关系 2. 设计约束满足模型: ```python from constraint import Problem pb = Problem() pb.addVariable("核心论点", ["A","B","C"]) # 候选主论点 pb.addConstraint(lambda a,b: a != b, ("核心论点","子论点")) ``` **结构优化验证** - 应用图论算法检测环路: $$Euler's\ formula: v - e + f = 2$$ 其中$v$=顶点数,$e$=边数,$f$=面数 - 实施逻辑一致性检查: ```prolog consistent(ThesisTree) :- \+ (member(Sub,SubArguments), contradicts(Sub,CoreArgument)). ``` **自动化生成工具链** || 处理阶段 | 推荐工具 | 输出形式 | |---|---|---|---| | 文档解析 | GROBID/PDFMiner | XML结构化数据 | | 关系抽取 | spaCy/AllenNLP | 知识图谱 | | 可视化 | LaTeX forest包/VUE | 可编辑矢量图 | 实施案例: ``` 文献集群 └─ 核心假设H ├─ 理论支撑层 [LDA主题1,主题2] │ ├─ 经典理论T1 (TF-IDF权重0.85) │ └─ 新兴理论T2 (共现频次12次) ├─ 实证数据层 │ ├─ 定量模型M (R²=0.76) │ └─ 质性编码Q (饱和度92%) └─ 反驳论点R (p<0.05) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值