使用Sikuli验证文本

时间:2013-12-03 21:27:45

标签: python sikuli

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

然后我使用Sikuli中的exists()函数验证数据。为此,我单击IDE左上角的exists函数,然后使用+工具选择我要验证的文本。在这种情况下,FirstName01和Location01。 然后我将MatchingPreview选项卡上的Similarity设置设置为.98(我发现如果我将其设置为1.0,即使我得到正确的数据,Sikuli仍然无法通过测试。)

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

我的代码在

下面
If exists(FirstName01):
   popup('passed')
else:
   popup('failed')

还有另一种验证数据的方法吗?

2 个答案:

答案 0 :(得分:10)

不是使用exists()来验证文本(因为sikuli的IDE中的OCR非常不可靠),如果有任何方法可以将要评估的文本放到剪贴板中,则可以使用Env.getClipboard()以更准确的方式评估它。

要将其移至剪贴板,您可以使用以下几种方法:

  1. dragDrop()突出显示文本
  2. 也许在文本框中的标签会自动为您突出显示文字
  3. 在文本上使用doubleClick()(取决于您要突出显示的内容,因此可能无法全部完成)
  4. 也许是最可靠的突出方式 - 在文本框中选项卡或在文本框内单击()并选择全部:
  5. click(someImageNearTextBox).offset() #get your cursor inside the textbox
    type("a",KeyModifier.CTRL) #select all to highlight the text
    

    突出显示文字后,您可以按以下步骤操作:

    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')
    

    这种方法的缺点是,如果文本框中有任何特殊字符,则可能无法正确评估。

答案 1 :(得分:-1)

好的,关于这个答案的第四版......对不起。今天是我在Sikuli的第二天,我开始在Python上开始。

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

type(Key.HOME,KeyModifier.CTRL)

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

所以我遇到了问题。它可以手工完成,但不适用于sikuli。 找到原因我发现:Sikuli上存在一个错误(实际上是Java),但是有一个工作区。

keyDown(Key.SHIFT)无法使用Num-Lock打开Win - 将其关闭; - )

https://answers.launchpad.net/sikuli/+question/143874