如何从元素获取用户输入并提供准确的响应?

时间:2019-09-27 20:39:36

标签: java android automation appium chatbot

我现在正在尝试在自己的android手机上制作一个聊天机器人,以便能够使有人说“嘿,男人”,该机器人以“ Sup man!”来回应。我也希望能够添加更多这些案例。

我在这里尝试过使用此方法

String A = "Hey man";

MobileElement element = (MobileElement) 
driver.findElement(By.id("com.samsung.android.app.memo:id/editText1"));
String text = element.getText();
System.out.println(text);

if (text == A) {

System.out.println("Sup man!");

} else {

System.out.println("No response available");

}

但这不起作用,因为text = element.getText()而不是“嘿男人”。谁能指出正确方法的正确方向?

1 个答案:

答案 0 :(得分:2)

您正在使用text比较字符串A==,这是比较字符串的错误方法-它测试两个String对象是否是同一个对象,而不仅仅是它们包含相同的文本。

您要使用if (text.equals(A))进行比较,或者,如果要匹配而不考虑大小写,请使用if (text.equalsIgnoreCase(A))

使用.equals()时,您正在寻找“ Hey man”,但是如果该人键入“ Hey man”,则这些字符将不匹配,并且漫游器不会仅仅因为大小写而响应“嘿”与“嘿”。如果您想匹配该短语,无论有人如何键入,都可以使用.equalsIgnoreCase()

如果您想使用多个短语,则可以使用数组或某种Collection,然后在其上循环查找匹配项,例如

for (final String phrase : phrases) {
    if (phrase.equalsIgnoreCase(text)) {
        System.out.println(some_text_for_that_phrase);
    }
}

...我正在使用phrases而不是A的地方,因为它更具描述性。

如果您希望对每个可能匹配的短语使用不同的响应,则可能希望您的 Collection Map,其中地图 key 是您想要的短语匹配,并且地图 value 是您将给出的响应。在这种情况下,您将获取用户文本并直接使用它来获取地图的响应,而无需循环

final String response = phraseMap.get( userText.toLowerCase() );
if (response != null) {
    System.out.println(response);
}

您无法将忽略大小写与地图键进行比较,因此,您希望将输入到地图中的每个关键短语都小写,然后将用户输入小写,使其与地图中的内容匹配。响应值当然可以是您想要的大小写混合形式。

如何用关键短语和答案填充地图将是另一个单独的问题。