From f016d77eabbdf32e33f9158fae160ea8468dbc2b Mon Sep 17 00:00:00 2001 From: Alex Kogon Date: Thu, 10 Sep 2015 14:52:43 +0200 Subject: [PATCH 1/2] always use text to match xpath --- src/org/synthuse/XpathManager.java | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/org/synthuse/XpathManager.java b/src/org/synthuse/XpathManager.java index c432b4f..9feb8ae 100644 --- a/src/org/synthuse/XpathManager.java +++ b/src/org/synthuse/XpathManager.java @@ -52,7 +52,8 @@ public class XpathManager implements Runnable{ @Override public void run() { - String results = buildXpathStatement(); + //@TODO (AJK) create separate action to use text mathing + String results = buildXpathStatement(true,50,50); events.executionCompleted(hwnd, results); } @@ -143,7 +144,22 @@ public class XpathManager implements Runnable{ parentTxtStr = " and @text='" + parentTxtStr + "'"; } if (!parentClassStr.isEmpty()) - builtXpath = "//win[@class='" + parentClassStr + "'" + parentTxtStr + "]/win[@class='" + classStr + "']"; + { + if (!txtStr.isEmpty()&&useFullTextMatching) { + if (txtStr.length() > maxTextLength) {// if the text is too long only test the first maxTextLength characters + txtStr = WindowsEnumeratedXml.escapeXmlAttributeValue(txtStr.substring(0, maxTextLength)); + txtStr = " and starts-with(@text,'" + txtStr + "')"; + } + else + txtStr = " and @text='" + txtStr + "'"; + builtXpath = "//win[@class='" + parentClassStr + "'" + parentTxtStr + "]/win[@class='" + classStr + "'" + txtStr + "]"; + } + else + { + builtXpath = "//win[@class='" + parentClassStr + "'" + parentTxtStr + "]/win[@class='" + classStr + "']"; + } + } + System.out.println(builtXpath); resultList = WindowsEnumeratedXml.evaluateXpathGetValues(xml, builtXpath); if (resultList.size() > 1) { // if there are still multiple results add position to the xpath int position = 1; From d6bd79d578d2525aea43431aac53adfd5159cf34 Mon Sep 17 00:00:00 2001 From: Alex Kogon Date: Thu, 10 Sep 2015 16:09:16 +0200 Subject: [PATCH 2/2] fixed error caused by editing twice --- src/org/synthuse/XpathManager.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/org/synthuse/XpathManager.java b/src/org/synthuse/XpathManager.java index 9feb8ae..737be8d 100644 --- a/src/org/synthuse/XpathManager.java +++ b/src/org/synthuse/XpathManager.java @@ -146,13 +146,14 @@ public class XpathManager implements Runnable{ if (!parentClassStr.isEmpty()) { if (!txtStr.isEmpty()&&useFullTextMatching) { - if (txtStr.length() > maxTextLength) {// if the text is too long only test the first maxTextLength characters - txtStr = WindowsEnumeratedXml.escapeXmlAttributeValue(txtStr.substring(0, maxTextLength)); - txtStr = " and starts-with(@text,'" + txtStr + "')"; + String copyOfTxtStr = txtStr; + if (copyOfTxtStr.length() > maxTextLength) {// if the text is too long only test the first maxTextLength characters + copyOfTxtStr = WindowsEnumeratedXml.escapeXmlAttributeValue(copyOfTxtStr.substring(0, maxTextLength)); + copyOfTxtStr = " and starts-with(@text,'" + copyOfTxtStr + "')"; } else - txtStr = " and @text='" + txtStr + "'"; - builtXpath = "//win[@class='" + parentClassStr + "'" + parentTxtStr + "]/win[@class='" + classStr + "'" + txtStr + "]"; + copyOfTxtStr = " and @text='" + copyOfTxtStr + "'"; + builtXpath = "//win[@class='" + parentClassStr + "'" + parentTxtStr + "]/win[@class='" + classStr + "'" + copyOfTxtStr + "]"; } else {