首页 > 解决方案 > 如何从元素中获取用户输入并提供准确的响应?

问题描述

我正在尝试在我的 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()而不是“嘿,伙计”。谁能指出我如何正确地做到这一点的正确方向?

标签: javaandroidautomationappiumchatbot

解决方案


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

你想比较使用if (text.equals(A)),或者,如果你想匹配而不考虑大小写,你会使用if (text.equalsIgnoreCase(A))

.equals()您一起寻找“嘿,伙计”,但如果该人键入“嘿伙计”,这些将不匹配,并且机器人不会仅仅因为大写与小写“嘿”与“嘿”而做出响应. 如果您想匹配该短语,无论有人如何键入它,您都会使用.equalsIgnoreCase()

如果你想有多个短语,你可以使用一个数组,或者某种集合,你可以循环它来找到一个匹配,比如

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

...我在哪里使用phrases而不是A因为它更具描述性。

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

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

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

如何用关键短语和响应填写地图将是另一个单独的问题。


推荐阅读