Skip to content

Commit 9b23fe5

Browse files
committed
Add kato experimental self-healing
- Add find-object example using kato - Move levenshtein distance out of viewclient - Add tests
1 parent 9e2ce0e commit 9b23fe5

13 files changed

Lines changed: 241 additions & 108 deletions

docs/api-objects.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ com.dtmilano.android.viewclient.ViewClient.isKeyboardShown com.dtmilano.android.
300300
com.dtmilano.android.viewclient.ViewClient.__obtainAdbPath com.dtmilano.android.viewclient.ViewClient-class.html#__obtainAdbPath
301301
com.dtmilano.android.viewclient.ViewClient.findViewWithContentDescriptionOrRaise com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithContentDescriptionOrRaise
302302
com.dtmilano.android.viewclient.ViewClient.build com.dtmilano.android.viewclient.ViewClient-class.html#build
303-
com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance
303+
com.dtmilano.android.viewclient.ViewClient.levenshtein_distance com.dtmilano.android.viewclient.ViewClient-class.html#levenshtein_distance
304304
com.dtmilano.android.viewclient.ViewClient.__parseTreeFromUiAutomatorDump com.dtmilano.android.viewclient.ViewClient-class.html#__parseTreeFromUiAutomatorDump
305305
com.dtmilano.android.viewclient.ViewClient.ro com.dtmilano.android.viewclient.ViewClient-class.html#ro
306306
com.dtmilano.android.viewclient.ViewClient.TRAVERSE_CITCD com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITCD

docs/com.dtmilano.android.viewclient-pysrc.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2541,7 +2541,7 @@ <h1 class="epydoc">Source Code for <a href="com.dtmilano.android.viewclient-modu
25412541
<a name="L2367"></a><tt class="py-lineno">2367</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
25422542
<a name="L2368"></a><tt class="py-lineno">2368</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-557" class="py-name"><a title="com.dtmilano.android.viewclient.DEBUG_DISTANCE" class="py-name" href="#" onclick="return doclink('link-557', 'DEBUG_DISTANCE', 'link-24');">DEBUG_DISTANCE</a></tt><tt class="py-op">:</tt> </tt>
25432543
<a name="L2369"></a><tt class="py-lineno">2369</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-op">&gt;&gt;</tt><tt class="py-name">sys</tt><tt class="py-op">.</tt><tt class="py-name">stderr</tt><tt class="py-op">,</tt> <tt class="py-string">"distance: trees have different length, using Levenshtein distance"</tt> </tt>
2544-
<a name="L2370"></a><tt class="py-lineno">2370</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-558" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-558', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-559" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance()=com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance"><a title="com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance" class="py-name" href="#" onclick="return doclink('link-559', '__levenshteinDistance', 'link-559');">__levenshteinDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt><tt class="py-op">/</tt><tt class="py-name">t</tt> </tt>
2544+
<a name="L2370"></a><tt class="py-lineno">2370</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-558" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-558', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-559" class="py-name" targets="Static Method com.dtmilano.android.viewclient.ViewClient.levenshtein_distance()=com.dtmilano.android.viewclient.ViewClient-class.html#levenshtein_distance"><a title="com.dtmilano.android.viewclient.ViewClient.levenshtein_distance" class="py-name" href="#" onclick="return doclink('link-559', 'levenshtein_distance', 'link-559');">levenshtein_distance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt><tt class="py-op">/</tt><tt class="py-name">t</tt> </tt>
25452545
</div><a name="L2371"></a><tt class="py-lineno">2371</tt> <tt class="py-line"> </tt>
25462546
<a name="L2372"></a><tt class="py-lineno">2372</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
25472547
<a name="ViewClient.__hammingDistance"></a><div id="ViewClient.__hammingDistance-def"><a name="L2373"></a><tt class="py-lineno">2373</tt> <a class="py-toggle" href="#" id="ViewClient.__hammingDistance-toggle" onclick="return toggle('ViewClient.__hammingDistance');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__hammingDistance">__hammingDistance</a><tt class="py-op">(</tt><tt class="py-param">s1</tt><tt class="py-op">,</tt> <tt class="py-param">s2</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
@@ -2577,8 +2577,8 @@ <h1 class="epydoc">Source Code for <a href="com.dtmilano.android.viewclient-modu
25772577
<a name="L2399"></a><tt class="py-lineno">2399</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-564" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-564', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-565" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__hammingDistance" class="py-name" href="#" onclick="return doclink('link-565', '__hammingDistance', 'link-556');">__hammingDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
25782578
</div><a name="L2400"></a><tt class="py-lineno">2400</tt> <tt class="py-line"> </tt>
25792579
<a name="L2401"></a><tt class="py-lineno">2401</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
2580-
<a name="ViewClient.__levenshteinDistance"></a><div id="ViewClient.__levenshteinDistance-def"><a name="L2402"></a><tt class="py-lineno">2402</tt> <a class="py-toggle" href="#" id="ViewClient.__levenshteinDistance-toggle" onclick="return toggle('ViewClient.__levenshteinDistance');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance">__levenshteinDistance</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">,</tt> <tt class="py-param">t</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2581-
</div><div id="ViewClient.__levenshteinDistance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.__levenshteinDistance-expanded"><a name="L2403"></a><tt class="py-lineno">2403</tt> <tt class="py-line"> <tt class="py-docstring">'''</tt> </tt>
2580+
<a name="ViewClient.levenshtein_distance"></a><div id="ViewClient.levenshtein_distance-def"><a name="L2402"></a><tt class="py-lineno">2402</tt> <a class="py-toggle" href="#" id="ViewClient.levenshtein_distance-toggle" onclick="return toggle('ViewClient.levenshtein_distance');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#levenshtein_distance">levenshtein_distance</a><tt class="py-op">(</tt><tt class="py-param">s</tt><tt class="py-op">,</tt> <tt class="py-param">t</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
2581+
</div><div id="ViewClient.levenshtein_distance-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="ViewClient.levenshtein_distance-expanded"><a name="L2403"></a><tt class="py-lineno">2403</tt> <tt class="py-line"> <tt class="py-docstring">'''</tt> </tt>
25822582
<a name="L2404"></a><tt class="py-lineno">2404</tt> <tt class="py-line"><tt class="py-docstring"> Find the Levenshtein distance between two Strings.</tt> </tt>
25832583
<a name="L2405"></a><tt class="py-lineno">2405</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
25842584
<a name="L2406"></a><tt class="py-lineno">2406</tt> <tt class="py-line"><tt class="py-docstring"> Python version of Levenshtein distance method implemented in Java at</tt> </tt>
@@ -2665,7 +2665,7 @@ <h1 class="epydoc">Source Code for <a href="com.dtmilano.android.viewclient-modu
26652665
<a name="L2487"></a><tt class="py-lineno">2487</tt> <tt class="py-line"> <tt class="py-name">s1</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt id="link-568" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-568', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-569" class="py-name" targets="Method com.dtmilano.android.viewclient.View.__microStr__()=com.dtmilano.android.viewclient.View-class.html#__microStr__"><a title="com.dtmilano.android.viewclient.View.__microStr__" class="py-name" href="#" onclick="return doclink('link-569', '__microStr__', 'link-569');">__microStr__</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">views</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
26662666
<a name="L2488"></a><tt class="py-lineno">2488</tt> <tt class="py-line"> <tt class="py-name">s2</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">map</tt><tt class="py-op">(</tt><tt id="link-570" class="py-name"><a title="com.dtmilano.android.viewclient.View" class="py-name" href="#" onclick="return doclink('link-570', 'View', 'link-61');">View</a></tt><tt class="py-op">.</tt><tt id="link-571" class="py-name"><a title="com.dtmilano.android.viewclient.View.__microStr__" class="py-name" href="#" onclick="return doclink('link-571', '__microStr__', 'link-569');">__microStr__</a></tt><tt class="py-op">,</tt> <tt class="py-name">tree</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
26672667
<a name="L2489"></a><tt class="py-lineno">2489</tt> <tt class="py-line"> </tt>
2668-
<a name="L2490"></a><tt class="py-lineno">2490</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-572" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-572', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-573" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance" class="py-name" href="#" onclick="return doclink('link-573', '__levenshteinDistance', 'link-559');">__levenshteinDistance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
2668+
<a name="L2490"></a><tt class="py-lineno">2490</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-572" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient" class="py-name" href="#" onclick="return doclink('link-572', 'ViewClient', 'link-323');">ViewClient</a></tt><tt class="py-op">.</tt><tt id="link-573" class="py-name"><a title="com.dtmilano.android.viewclient.ViewClient.levenshtein_distance" class="py-name" href="#" onclick="return doclink('link-573', 'levenshtein_distance', 'link-559');">levenshtein_distance</a></tt><tt class="py-op">(</tt><tt class="py-name">s1</tt><tt class="py-op">,</tt> <tt class="py-name">s2</tt><tt class="py-op">)</tt> </tt>
26692669
</div><a name="L2491"></a><tt class="py-lineno">2491</tt> <tt class="py-line"> </tt>
26702670
<a name="L2492"></a><tt class="py-lineno">2492</tt> <tt class="py-line"> <tt class="py-decorator">@</tt><tt class="py-decorator">staticmethod</tt> </tt>
26712671
<a name="ViewClient.excerpt"></a><div id="ViewClient.excerpt-def"><a name="L2493"></a><tt class="py-lineno">2493</tt> <a class="py-toggle" href="#" id="ViewClient.excerpt-toggle" onclick="return toggle('ViewClient.excerpt');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="com.dtmilano.android.viewclient.ViewClient-class.html#excerpt">excerpt</a><tt class="py-op">(</tt><tt class="py-param">str</tt><tt class="py-op">,</tt> <tt class="py-param">execute</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>

docs/com.dtmilano.android.viewclient.ViewClient-class.html

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1629,11 +1629,11 @@ <h1 class="heading">UiAutomatorHelper backend</h1>
16291629
</td><td class="summary">
16301630
<table width="100%" cellpadding="0" cellspacing="0" border="0">
16311631
<tr>
1632-
<td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance" class="summary-sig-name" onclick="show_private();">__levenshteinDistance</a>(<span class="summary-sig-arg">s</span>,
1632+
<td><span class="summary-sig"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#levenshtein_distance" class="summary-sig-name" onclick="show_private();">levenshtein_distance</a>(<span class="summary-sig-arg">s</span>,
16331633
<span class="summary-sig-arg">t</span>)</span><br />
16341634
Find the Levenshtein distance between two Strings.</td>
16351635
<td align="right" valign="top">
1636-
<span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__levenshteinDistance">source&nbsp;code</a></span>
1636+
<span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.levenshtein_distance">source&nbsp;code</a></span>
16371637

16381638
</td>
16391639
</tr>
@@ -3172,19 +3172,19 @@ <h3 class="epydoc"><span class="sig"><span class="sig-name">__hammingDistance</s
31723172
</dl>
31733173
</td></tr></table>
31743174
</div>
3175-
<a name="__levenshteinDistance"></a>
3175+
<a name="levenshtein_distance"></a>
31763176
<div class="private">
31773177
<table class="details" border="1" cellpadding="3"
31783178
cellspacing="0" width="100%" bgcolor="white">
31793179
<tr><td>
31803180
<table width="100%" cellpadding="0" cellspacing="0" border="0">
31813181
<tr valign="top"><td>
3182-
<h3 class="epydoc"><span class="sig"><span class="sig-name">__levenshteinDistance</span>(<span class="sig-arg">s</span>,
3182+
<h3 class="epydoc"><span class="sig"><span class="sig-name">levenshtein_distance</span>(<span class="sig-arg">s</span>,
31833183
<span class="sig-arg">t</span>)</span>
31843184
<br /><em class="fname">Static Method</em>
31853185
</h3>
31863186
</td><td align="right" valign="top"
3187-
><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__levenshteinDistance">source&nbsp;code</a></span>&nbsp;
3187+
><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.levenshtein_distance">source&nbsp;code</a></span>&nbsp;
31883188
</td>
31893189
</tr></table>
31903190

docs/identifier-index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2435,7 +2435,7 @@ <h1 class="epydoc">Identifier Index</h1>
24352435
<tr>
24362436
<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.Device-class.html#__init__">__init__()</a><br />
24372437
<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.Device-class.html">Device</a>)</span></td>
2438-
<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance">__levenshteinDistance()</a><br />
2438+
<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#levenshtein_distance">levenshtein_distance()</a><br />
24392439
<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
24402440
<td width="33%" class="link-index"><a href="com.dtmilano.android.window.Window-class.html#__str__">__str__()</a><br />
24412441
<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.window.Window-class.html">Window</a>)</span></td>

0 commit comments

Comments
 (0)