gpt4 book ai didi

java - 如何检测TextArea的值发生变化?

转载 作者:行者123 更新时间:2023-11-30 03:30:35 25 4
gpt4 key购买 nike

我正在测试一个网络聊天应用程序。每次与我聊天的用户发送消息时,它都会附加到文本区域,就像任何聊天解决方案一样。我想检测新消息何时到达并获取其内容(文本)。

这就像拦截给定元素的 javascript onChange 事件。是否可以使用 Selenium WebDriver 来做到这一点?

我有兴趣针对任何支持此功能的浏览器进行测试。我没有兴趣在所有可能的浏览器上测试此行为。

目的是开发类似聊天机器人的东西,每当另一端发送消息时,它就会发回一条消息。例如:

Remote user sends: Hello!
Selenium detects that and sends back: Your last message was "Hello!".

我无法更改聊天应用程序代码。

是否可以在不合并文本区域的情况下做到这一点?我的目的是监听事件,但是我找不到类似的东西,而且我被告知 Selenium WebDriver 不支持它。

最佳答案

好吧,回答你的问题 - “这可能吗?” - 绝对是的!!如何 ? - 嗯,这实际上取决于聊天应用程序及其界面的自动化友好程度。

以这个简单的聊天应用程序为例(它就像一个聊天机器人)- http://www.unionplatform.com/?page_id=2247(我在示例代码中使用了它的直接 URL)。

检查下面的代码,我只是检查<span>标记更新的值并循环 5 次以读取用户已输入并回复相同的消息 + 循环计数(以区分消息)。

您可以遵循类似的方法,但是正如我再次提到的,这一切都取决于聊天应用程序。

代码如下:

public class WhiteBoard {

public WebDriver driver;
public String css_chat_text = "div#chatPane>span";
public String css_input_msg = "input#outgoing";
public String css_send_button = "input[value='Send']";
public String last_message = "";

public static void main(String[] args) throws Exception {

WhiteBoard objTest = new WhiteBoard();
objTest.chatBot();

}

public void chatBot() throws Exception{

driver = new FirefoxDriver();
driver.navigate().to("http://unionplatform.com/samples/orbitermicro/UnionChatPart1/chat.html");

List<WebElement> objChats = driver.findElements(By.cssSelector(css_chat_text));
if(objChats.size() > 0){
System.out.println("Starting chattter...");
String status;
//loop until chat ready
do{
Thread.sleep(3000);
objChats = driver.findElements(By.cssSelector(css_chat_text));

status = objChats.get(objChats.size()-1).getText().toString();
System.out.println(status);

}while(!status.contains("Chat ready!"));

Thread.sleep(3000);
//start chatting...
sendMessage("Hello...");

for(int i=0; i<5; i++) {
objChats = driver.findElements(By.cssSelector(css_chat_text));
last_message = objChats.get(objChats.size()-1).getText().toString().trim();
sendMessage("LastMsg:" + last_message + "#" +i);
Thread.sleep(5000);
}
}
else{
System.out.println("Chat not found...");
}
}


public void sendMessage(String message){

//start chatting...
List<WebElement> objInput = driver.findElements(By.cssSelector(css_input_msg));
if(objInput.size() > 0){
objInput.get(0).sendKeys(message);
System.out.println("Sent message..." + message);
List<WebElement> btnSend = driver.findElements(By.cssSelector(css_send_button));
btnSend.get(0).click();
}
}

}

sleep 只是粗略地保持等待直到聊天框更新,理想情况下我会继续检查 <span>计数并在递增后继续。

上述代码的控制台输出如下所示 - https://gist.github.com/anonymous/f1eef7198648d95f1d01

还有另一个关于 SO 的有趣问题可能会有所帮助 - How to test chat web app

关于java - 如何检测TextArea的值发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com