7

在网站上运行 Selenium 测试时,我有一些 Flash 元素无法使用 Selenium/Python 进行测试。我想调用一个单独的终端窗口,运行 Sikuli OCR 测试,然后返回到 Selenium/Python 测试。我一直无法准确地弄清楚这一点。我将 XXX 放在我不知道新终端打开和运行 Sikuli 脚本的参数的地方。

def test_05(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_link_text("Home").click()
        driver.find_element_by_id("open_popup").click()
        driver.find_element_by_id("screen_name").send_keys("user")
        driver.find_element_by_id("password").send_keys("pwd")
        driver.find_element_by_id("login_submit").click()
        driver.find_element_by_id("button").click()
        time.sleep(120)
        os.system('XXX')
        os.system('./Sikuli/sikuli-script -r test.sikuli')

我敢肯定这里有几个问题。任何帮助将不胜感激。我已经搜索并阅读了我可以找到的内容,但无法将所有内容一起工作。

4

3 回答 3

3

我遇到了类似的问题,所以我为 Sikuli 编写了一个 CPython 模块。该模块托管在 GitHub 上,可通过pip install sikuli. 它可以使用pyjnius访问包含的 Sikuli jar ,因此您不必使用 Jython 甚至无需安装 Sikuli 本身(尽管我建议将其用于记录目的)。该模块目前涵盖了大多数更简单的 Sikuli 功能,因此它应该涵盖很多用例。

安装后,一个简单的from sikuli import *就可以让你开始,但作为最佳实践,我建议只导入你想要使用的功能。这对于这个模块特别重要,因为 sikuli 有一个type函数可以覆盖 Python 自己的type函数。

于 2013-12-04T04:22:06.333 回答
3

如果您的 sikuli 脚本是完全独立的,并且您只想运行一次,然后将控制权返回给您的 python 脚本。然后您可以创建一个批处理文件,该文件调用您的 sikuli 脚本并从您的 python 脚本中调用此批处理文件。一旦批处理文件完成运行,它就会退出并将控制权返回给您的 python 脚本。

示例批处理文件:

@echo off
call C:\Sikuli\runIDE.cmd -r C:\Automation\Test1.sikuli
exit

从 python 内部调用 Sikuli 脚本的代码片段:

import subprocess

def runSikuliScript(path):
    filepath = path
    p = subprocess.Popen(filepath, shell=True, stdout = subprocess.PIPE)
    stdout, stderr = p.communicate()
    print "Done Running Sikuli"

p = "C:\\Automation\\Test1\\test1.bat"
runSikuliScript(p)
// You can carry on writing your python code from here on
于 2014-06-24T18:55:02.017 回答
1

对于从 Selenium 调用 Sikuli 代码,我的首选是 TestAutomationEngr 建议使用 Java,因为 Selenium 和 Sikuli 都具有本机 Java 绑定。

既然你想使用 Python,你应该尝试在 Jython 下运行 Selenium。重要的是要记住 Sikuli 是Jython,这可能是您无法导入它的原因。(另一个原因是您在 Jython 的模块路径中没有它。)我自己没有尝试过,但去年在 Selenium 中修复了一个错误,表明它在 Jython 下应该没问题。

请注意,如果您直接从 Jython 调用您的 Sikuli 代码,则需要添加

from sikuli.Sikuli import *

到顶部。这是因为 Sikuli IDE 隐含地将其添加到所有 Sikuli 代码中。

最后,您最后的手段是从命令行调用 Sikuli。 有一个常见问题解答。您可能需要“无 IDE”版本,在该版本中调用 Java 并传入 sikuli-script JAR 文件。

于 2013-08-14T00:04:39.960 回答