Skip to content

Commit

Permalink
Add kato experimental self-healing
Browse files Browse the repository at this point in the history
- Add find-object example using kato
- Move levenshtein distance out of viewclient
- Add tests
  • Loading branch information
dtmilano committed Oct 31, 2022
1 parent 9e2ce0e commit 9b23fe5
Show file tree
Hide file tree
Showing 13 changed files with 241 additions and 108 deletions.
2 changes: 1 addition & 1 deletion docs/api-objects.txt
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ com.dtmilano.android.viewclient.ViewClient.isKeyboardShown com.dtmilano.android.
com.dtmilano.android.viewclient.ViewClient.__obtainAdbPath com.dtmilano.android.viewclient.ViewClient-class.html#__obtainAdbPath
com.dtmilano.android.viewclient.ViewClient.findViewWithContentDescriptionOrRaise com.dtmilano.android.viewclient.ViewClient-class.html#findViewWithContentDescriptionOrRaise
com.dtmilano.android.viewclient.ViewClient.build com.dtmilano.android.viewclient.ViewClient-class.html#build
com.dtmilano.android.viewclient.ViewClient.__levenshteinDistance com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance
com.dtmilano.android.viewclient.ViewClient.levenshtein_distance com.dtmilano.android.viewclient.ViewClient-class.html#levenshtein_distance
com.dtmilano.android.viewclient.ViewClient.__parseTreeFromUiAutomatorDump com.dtmilano.android.viewclient.ViewClient-class.html#__parseTreeFromUiAutomatorDump
com.dtmilano.android.viewclient.ViewClient.ro com.dtmilano.android.viewclient.ViewClient-class.html#ro
com.dtmilano.android.viewclient.ViewClient.TRAVERSE_CITCD com.dtmilano.android.viewclient.ViewClient-class.html#TRAVERSE_CITCD
Expand Down
8 changes: 4 additions & 4 deletions docs/com.dtmilano.android.viewclient-pysrc.html
Original file line number Diff line number Diff line change
Expand Up @@ -2541,7 +2541,7 @@ <h1 class="epydoc">Source Code for <a href="com.dtmilano.android.viewclient-modu
<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>
<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>
<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>
<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>
<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>
</div><a name="L2371"></a><tt class="py-lineno">2371</tt> <tt class="py-line"> </tt>
<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>
<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>
Expand Down Expand Up @@ -2577,8 +2577,8 @@ <h1 class="epydoc">Source Code for <a href="com.dtmilano.android.viewclient-modu
<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>
</div><a name="L2400"></a><tt class="py-lineno">2400</tt> <tt class="py-line"> </tt>
<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>
<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>
</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>
<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>
</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>
<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>
<a name="L2405"></a><tt class="py-lineno">2405</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
<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>
Expand Down Expand Up @@ -2665,7 +2665,7 @@ <h1 class="epydoc">Source Code for <a href="com.dtmilano.android.viewclient-modu
<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>
<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>
<a name="L2489"></a><tt class="py-lineno">2489</tt> <tt class="py-line"> </tt>
<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>
<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>
</div><a name="L2491"></a><tt class="py-lineno">2491</tt> <tt class="py-line"> </tt>
<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>
<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>
Expand Down
10 changes: 5 additions & 5 deletions docs/com.dtmilano.android.viewclient.ViewClient-class.html
Original file line number Diff line number Diff line change
Expand Up @@ -1629,11 +1629,11 @@ <h1 class="heading">UiAutomatorHelper backend</h1>
</td><td class="summary">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<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>,
<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>,
<span class="summary-sig-arg">t</span>)</span><br />
Find the Levenshtein distance between two Strings.</td>
<td align="right" valign="top">
<span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__levenshteinDistance">source&nbsp;code</a></span>
<span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.levenshtein_distance">source&nbsp;code</a></span>

</td>
</tr>
Expand Down Expand Up @@ -3172,19 +3172,19 @@ <h3 class="epydoc"><span class="sig"><span class="sig-name">__hammingDistance</s
</dl>
</td></tr></table>
</div>
<a name="__levenshteinDistance"></a>
<a name="levenshtein_distance"></a>
<div class="private">
<table class="details" border="1" cellpadding="3"
cellspacing="0" width="100%" bgcolor="white">
<tr><td>
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr valign="top"><td>
<h3 class="epydoc"><span class="sig"><span class="sig-name">__levenshteinDistance</span>(<span class="sig-arg">s</span>,
<h3 class="epydoc"><span class="sig"><span class="sig-name">levenshtein_distance</span>(<span class="sig-arg">s</span>,
<span class="sig-arg">t</span>)</span>
<br /><em class="fname">Static Method</em>
</h3>
</td><td align="right" valign="top"
><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.__levenshteinDistance">source&nbsp;code</a></span>&nbsp;
><span class="codelink"><a href="com.dtmilano.android.viewclient-pysrc.html#ViewClient.levenshtein_distance">source&nbsp;code</a></span>&nbsp;
</td>
</tr></table>

Expand Down
2 changes: 1 addition & 1 deletion docs/identifier-index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2435,7 +2435,7 @@ <h1 class="epydoc">Identifier Index</h1>
<tr>
<td width="33%" class="link-index"><a href="com.dtmilano.android.adb.adbclient.Device-class.html#__init__">__init__()</a><br />
<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.adb.adbclient.Device-class.html">Device</a>)</span></td>
<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#__levenshteinDistance">__levenshteinDistance()</a><br />
<td width="33%" class="link-index"><a href="com.dtmilano.android.viewclient.ViewClient-class.html#levenshtein_distance">levenshtein_distance()</a><br />
<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.viewclient.ViewClient-class.html">ViewClient</a>)</span></td>
<td width="33%" class="link-index"><a href="com.dtmilano.android.window.Window-class.html#__str__">__str__()</a><br />
<span class="index-where">(in&nbsp;<a href="com.dtmilano.android.window.Window-class.html">Window</a>)</span></td>
Expand Down
Loading

0 comments on commit 9b23fe5

Please sign in to comment.