常见问题
我的测试非常慢
当您使用此@wdio/ocr-service
时,您并非使用它来加速测试,而是因为您在 Web/移动应用程序中难以定位元素,并且想要一种更简单的方法来定位它们。我们都希望知道,当您想要某样东西时,就会失去别的东西。但是……,有一种方法可以让@wdio/ocr-service
比平时执行得更快。有关此方面的更多信息,请参见此处。
我可以将此服务的命令与默认的 WebdriverIO 命令/选择器一起使用吗?
是的,您可以组合这些命令以使您的脚本功能更强大!建议尽可能使用默认的 WebdriverIO 命令/选择器,仅当您找不到唯一的选择器或选择器变得过于脆弱时才使用此服务。
找不到我的文本,这怎么可能?
首先,了解此模块中 OCR 过程的工作原理非常重要,因此请阅读此页面。如果您仍然找不到您的文本,可以尝试以下方法。
图像区域太大
当模块需要处理屏幕截图的大区域时,它可能找不到文本。在使用命令时,您可以通过提供搜索范围来提供较小的区域。请查看命令,哪些命令支持提供搜索范围。
文本和背景之间的对比度不正确
这意味着您可能在白色背景上使用了浅色文本或在深色背景上使用了深色文本。这可能导致无法找到文本。在下面的示例中,您可以看到文本Why WebdriverIO?
为白色,并被灰色按钮包围。在这种情况下,将导致找不到Why WebdriverIO?
文本。通过增加特定命令的对比度,它可以找到文本并单击它,请参见第二张图片。
await driver.ocrClickOnText({
haystack: { height: 44, width: 1108, x: 129, y: 590 },
text: "WebdriverIO?",
// // With the default contrast of 0.25, the text is not found
contrast: 1,
});
为什么我的元素被点击了,但我的移动设备上的键盘从未弹出?
这可能发生在某些文本字段上,其中点击持续时间过长,被视为长按。您可以使用ocrClickOnText
和ocrSetValue
上的clickDuration
选项来缓解这种情况。请参见此处。
此模块可以像 WebdriverIO 通常那样返回多个元素吗?
否,目前尚不可能。如果模块找到多个与提供的选择器匹配的元素,它将自动找到匹配得分最高的元素。
我可以使用此服务提供的 OCR 命令完全自动化我的应用程序吗?
我从未做过,但理论上应该是可能的。如果您成功了,请告诉我们☺️。
我看到添加了一个名为{languageCode}.traineddata
的额外文件,这是什么?
{languageCode}.traineddata
是 Tesseract 使用的语言数据文件。它包含所选语言的训练数据,其中包括 Tesseract 有效识别英语字符和单词所需的信息。
{languageCode}.traineddata
的内容
该文件通常包含
- **字符集数据:**有关英语字符的信息。
- **语言模型:**字符如何构成单词以及单词如何构成句子的统计模型。
- **特征提取器:**有关如何从图像中提取特征以识别字符的数据。
- **训练数据:**从在大量英语文本图像上训练 Tesseract 获得的数据。
为什么{languageCode}.traineddata
很重要?
- **语言识别:**Tesseract 依赖于这些训练数据文件来准确识别和处理特定语言的文本。如果没有
{languageCode}.traineddata
,Tesseract 将无法识别英语文本。 - **性能:**OCR 的质量和准确性与训练数据的质量直接相关。使用正确的训练数据文件可确保 OCR 过程尽可能准确。
- **兼容性:**确保
{languageCode}.traineddata
文件包含在您的项目中,从而更容易在不同的系统或团队成员的机器上复制 OCR 环境。
{languageCode}.traineddata
的版本控制
建议出于以下原因将{languageCode}.traineddata
包含在您的版本控制系统中
- **一致性:**它确保所有团队成员或部署环境都使用完全相同的训练数据版本,从而导致在不同环境中获得一致的 OCR 结果。
- **可重复性:**将此文件存储在版本控制中,使得在以后的日期或不同的机器上运行 OCR 过程时更容易重现结果。
- **依赖项管理:**将其包含在版本控制系统中有助于管理依赖项,并确保任何设置或环境配置都包含项目正确运行所需的文件。
有没有一种简单的方法可以在不运行测试的情况下查看我的屏幕上找到了哪些文本?
是的,您可以为此使用我们的 CLI 向导。文档请参见此处