gpt4 book ai didi

java - 如何使用 Appium 在移动应用程序中获取 toastr 消息的文本

转载 作者:行者123 更新时间:2023-12-02 02:51:38 25 4
gpt4 key购买 nike

我正在尝试在 Android 移动应用中验证 toastr 消息,但无法获取 toastr 消息的文本,因为它没有显示在 uiautomatorviewer 中。得到一些信息,通过 OCR 的帮助,可以完成屏幕截图并从屏幕截图中获取文本谁能帮助我如何在 Appium 项目中使用 java 一步一步地完成此操作?

最佳答案

您可以按照以下链接中的信息在您的计算机上安装 Tesseract:

对于 Mac:http://emop.tamu.edu/Installing-Tesseract-Mac

对于 Windows:http://emop.tamu.edu/Installing-Tesseract-Windows8

在您的计算机上安装 TessEract 后,您需要在项目中添加 TessEract Java 库的依赖项。如果您使用 Maven,则添加以下依赖项即可:

    <dependency>
<groupId>org.bytedeco.javacpp-presets</groupId>
<artifactId>tesseract</artifactId>
<version>3.04-1.1</version>
</dependency>

Ivan 提到的“第 3 步”也不需要遵循。

如果您使用“TestNG”,TessEract API 只需要初始化一次,因此不必每次都初始化,根据您的框架,您可以在“BeforeTest”或“BeforeSuite”或“BeforeClass”方法中初始化它并相应地在“AfterTest”或“AfterSuite”或“AfterClass”方法中关闭 API。

下面是我为实现它而编写的代码。

import static org.bytedeco.javacpp.lept.pixDestroy;
import static org.bytedeco.javacpp.lept.pixRead;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.bytedeco.javacpp.lept.PIX;
import org.bytedeco.javacpp.tesseract.TessBaseAPI;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;

public class BaseTest {

static TessBaseAPI api = new TessBaseAPI();

@BeforeSuite
public void beforeSuit() throws IOException {

File screenshotsDirec = new File("target/screenshots");

if (screenshotsDirec.exists())
FileUtils.forceDelete(screenshotsDirec);

FileUtils.forceMkdir(screenshotsDirec);

System.out.println("Initializing TessEract library");

if (api.Init("/opt/local/share", "eng") != 0) {
System.err.println("Could not initialize tesseract.");
}

}

public synchronized boolean verifyToastMessage(String msg)
throws IOException {
TakesScreenshot takeScreenshot = ((TakesScreenshot) driver);

File[] screenshots = new File[5];

for (int i = 0; i < screenshots.length; i++) {
screenshots[i] = takeScreenshot.getScreenshotAs(OutputType.FILE);
}

String outText;

Boolean isMsgContains = false;

for (int i = 0; i < screenshots.length; i++) {
PIX image = pixRead(screenshots[i].getAbsolutePath());
api.SetImage(image);
outText = api.GetUTF8Text().getString().replaceAll("\\s", "");
System.out.println(outText);
isMsgContains = outText.contains(msg);
pixDestroy(image);
if (isMsgContains) {
break;
}
}

return isMsgContains;

}

@AfterSuite()
public void afterTest() {

try {
api.close();
} catch (Exception e) {
api.End();
e.printStackTrace();
}

}
}

我还想补充一点,以这种方式编写测试来读取和验证 Toast 消息并不是很可靠,因为在我的一个测试中,此代码成功捕获了 Toast 消息,而在另一个测试中,它无法捕获 Toast消息,因为屏幕截图的捕获是在 toast 消息消失时开始的。这就是我尝试非常高效地编写这段代码的原因。但这也达不到目的。

关于java - 如何使用 Appium 在移动应用程序中获取 toastr 消息的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43752752/

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