我尝试在Pytest中启动Sikuli测试。我的目标是通过单击“确定”来处理PKCS12 Chrome警报。
为此,我运行一个子进程,以Sikuli测试作为参数,调用Sikuli JAR。子进程调用在Python 3.8中有效,因为它在Python空闲状态下运行良好。但是在pytest进程中,不知道子进程在做什么,并且测试以超时异常结束。
关于我所缺少的任何想法?
我的上下文:
我的代码:
import subprocess
from selenium import webdriver
import time
def test_webaccess():
options=webdriver.ChromeOptions()
options.add_argument('--allow-running-insecure-content')
options.add_argument('--ignore-certificate-errors')
driver = webdriver.Chrome(options=options)
driver.get("https://<my_website_url>/")
time.sleep(10)
subprocess.run('java -jar %SIKULI%/sikulix-2.0.0.jar -r <path_to_sikuli_test>/click_ok.py', shell=True, capture_output=True)
assert "<webiste_title>" in driver.title
assert "No results found." not in driver.page_source
driver.close()
我找到了解决方案。
get命令正在等待HTTP响应。因此,子进程永远不会运行。
为此,您需要使用multiprocessing。
解决方案代码:
import subprocess
from selenium import webdriver
from multiprocessing import Process
def clik_ok():
subprocess.run('java -jar %SIKULI%/sikulix-2.0.0.jar -r <path_to_sikuli_test>/click_ok.py', shell=True, capture_output=True)
def test_sdc_webaccess():
options=webdriver.ChromeOptions()
options.add_argument('--allow-running-insecure-content')
options.add_argument('--ignore-certificate-errors')
driver = webdriver.Chrome(options=options)
p=Process(target=clik_ok)
p.start()
driver.get("<my_website_url>")
p.join()
assert "<webiste_title>" in driver.title
assert "No results found." not in driver.page_source
driver.close()