Python 使用Sikuli验证文本

Python 使用Sikuli验证文本,python,sikuli,Python,Sikuli,我正在使用Sikuli IDE测试一个在文本框中返回数据的应用程序。 例如 我在名称字段中搜索我的测试值“FirstName01”。应用程序在各种文本框中返回名称和地址 然后,我使用Sikuli中的exists()函数验证数据。为此,我单击IDE左上角的exists函数,并使用+工具选择要验证的文本。在本例中,FirstName01和Location01。 然后,我将MatchingPreview选项卡上的相似性设置设置为.98(我发现,如果我将其设置为1.0,那么即使我得到了正确的数据,测试也

我正在使用Sikuli IDE测试一个在文本框中返回数据的应用程序。 例如 我在名称字段中搜索我的测试值“FirstName01”。应用程序在各种文本框中返回名称和地址

然后,我使用Sikuli中的exists()函数验证数据。为此,我单击IDE左上角的exists函数,并使用+工具选择要验证的文本。在本例中,FirstName01和Location01。 然后,我将MatchingPreview选项卡上的相似性设置设置为.98(我发现,如果我将其设置为1.0,那么即使我得到了正确的数据,测试也会失败)

如果我运行搜索FirstName01的测试,我会得到正确的结果,并且Sikuli不会抛出错误。我的问题是,如果我搜索并返回FirstName02以试图生成错误条件,exists函数将通过它,即使它正在查找FirstName01。 似乎Sikuli没有验证数据的最后一个字符。它似乎验证了其他字符,因为如果我搜索FirstName21,exists函数会抛出一个错误。有人遇到过这个问题吗?如果有,你是如何解决的

我的代码在下面

If exists(FirstName01):
   popup('passed')
else:
   popup('failed')
是否有其他方法验证数据?

而不是使用exists()验证文本(因为sikuli的IDE中的OCR非常不可靠),如果有任何方法可以将要计算的文本放入剪贴板,则可以使用Env.getClipboard()更准确地计算文本

要将其放入剪贴板,可以使用以下几种方法:

  • dragDrop()以高亮显示文本
  • 或许,在文本框中使用Tab键会自动为您突出显示文本
  • 对文本使用doubleClick()(取决于您试图突出显示的内容,因此可能无法全部获得)
  • 可能是突出显示它的最可靠的方式--在文本框中单击tab,或在文本框中单击()并选择all:
  • 文本高亮显示后,可以按如下方式继续:

    type("c",KeyModifier.CTRL) #copy selection to the clipboard
    firstName = Env.getClipboard().strip() #assign contents of clipboard to a variable
    
    然后,您可以将其用于任何您想要的比较:

    if firstName == "FirstName01":
        popup('passed')
    else:
        popup('failed')
    

    这种方法的缺点是,如果文本框中有任何特殊字符,它可能无法正确计算

    好的,关于这个答案的第四版。。。很抱歉今天是我在Sikuli上的第二天,我开始学习Python

    我改编了自传的答案。在我的文本框(多行)上,CTRL+A无法选择所有文本。我使用CTRL+Home转到文本框的开头,使用CTRL+SHIFT+End转到选择文本的结尾

    类型(Key.HOME、KeyModifier.CTRL)

    类型(Key.END,KeyModifier.CTRL | KeyModifier.SHIFT)

    所以我遇到了一个问题。它可以手工操作,但不能在sikuli上操作。 探究我发现的原因:Sikuli上有一个bug(实际上是Java上的bug),但有一个解决方法

    keyDown(Key.SHIFT)在Num Lock打开的情况下无法在Win上工作--请将其关闭;-)


    我很高兴!你介意把它标为可接受的答案吗?(我需要一点声誉提升…)谢谢!
    if firstName == "FirstName01":
        popup('passed')
    else:
        popup('failed')