如果我运行以下命令,则会有一个时间窗口,我可以发送Optional.ofNullable(words[5]).ifPresent(a -> System.out.println(a.toLowerCase())).orElse();// doesn't work```
,以便Firefox实例都打开 SIGINT
并没有定义。
self.firefox
大概是因为硒启动浏览器和返回参考之间发生了中断。
虽然较小,但在运行无头测试时,错误时间的中断可能会使FF实例处于打开状态,而没有引用。有没有一种方法可以识别和管理由Selenium启动的Firefox实例,而又不会杀死用户在计算机上运行的任何正常Firefox实例?
答案 0 :(得分:0)
确切地说,有人已经回答了如何停止geckodriver实例: [https://stackoverflow.com/a/48003289/6892765][1]
现在回到中断发生时如何使用它。 在运行测试时,必须使用诸如pytest之类的测试引擎,该引擎具有处理此类中断的功能。
专门用于pytest引擎:
在conftest.py文件中实现pytest_exception_interact
,当引发异常时可以调用该文件,该异常可以交互处理。
def pytest_exception_interact(node, call, report):
# Your code to perform geckodriver instance killing
答案 1 :(得分:0)
我尝试了几件事,最终根据学习者8269提出的解决方案提出了一个解决方案。如他在我的系统上的评论中所述,Windows 10 /当前Geckodriver实例无法与正常的Firefox进程区分开。结果,我最终用try catch
语句和以下代码包装了对象创建:
from subprocess import check_output
from selenium import webdriver
import re
tasklist = check_output(["tasklist", "/fi", "imagename eq firefox.exe"], shell=True).decode()
currentFFIDs = re.findall(r"firefox.exe\s+(\d+)", tasklist)
try:
firefox = webdriver.Firefox()
except:
tasklist = check_output(["tasklist", "/fi", "imagename eq firefox.exe"], shell=True).decode()
firefoxIds = set(re.findall(r"firefox.exe\s+(\d+)", tasklist)).difference(currentFFIDs)
taskkill = 'taskkill /f '+''.join(["/pid "+f+" " for f in firefoxIds]).strip()
check_output(taskkill.split(), shell=True)
print("\nFirefox was force closed\n", flush=True)
这是什么:
subprocess
在tasklist
中调用cmd
命令并使用正则表达式提取进程ID列来完成的。tasklist
并获取一组新的进程ID
tasklist
过程之后创建的所有新的Firefox ID;然后将终止所有无头的Firefox实例。