在网站上运行Selenium测试时,我有一些我无法使用Selenium / Python测试的Flash元素。我想呼叫一个单独的终端窗口,运行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')
我确信这里有一些错误。任何帮助将不胜感激。我已经搜索并阅读了我已经可以找到的内容,但无法全部共同努力。
答案 0 :(得分:2)
我遇到了类似的问题,所以我为Sikuli写了一个CPython模块。该模块已托管on GitHub,可通过pip install sikuli
获取。它可以使用pyjnius访问包含的Sikuli jar,因此您不必使用Jython甚至安装Sikuli本身(尽管我建议将其用于录制目的)。该模块目前涵盖了大多数更简单的Sikuli函数,因此它应该涵盖了很多用例。
安装完成后,一个简单的from sikuli import *
将帮助您入门,但作为最佳实践,我建议您只导入要使用的功能。这对于这个模块尤其重要,因为sikuli有一个type
函数,它覆盖了Python自己的type
函数。
答案 1 :(得分:1)
为了从Selenium调用Sikuli代码,我的第一选择是TestAutomationEngr建议使用Java,因为Selenium和Sikuli都有本机Java绑定。
由于你想使用Python,你应该尝试在Jython下运行Selenium。重要的是要记住Sikuli是 Jython ,这可能是你无法导入它的原因。 (另一个原因是你没有在Jython的模块路径中使用它。)我自己没有尝试过这个,但是Selenium中有一个bug fixed last year表明它在Jython下应该没问题。
请注意,如果直接从Jython调用Sikuli代码,则需要添加
from sikuli.Sikuli import *
到顶部。这是因为Sikuli IDE隐含地将其添加到所有Sikuli代码中。
最后,你最后的办法是从命令行调用Sikuli。 There's an FAQ for that。您可能需要“无IDE”版本,您可以在其中调用Java并传入sikuli脚本JAR文件。
答案 2 :(得分:0)
如果你的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