Wenn Sie den Quellcode der Python-Selen-Treiber erkunden würde, würden Sie sehen, was die quit()
method des Firefox-Treiber tut:
def quit(self):
"""Quits the driver and close every associated window."""
try:
RemoteWebDriver.quit(self)
except (http_client.BadStatusLine, socket.error):
# Happens if Firefox shutsdown before we've read the response from
# the socket.
pass
self.binary.kill()
try:
shutil.rmtree(self.profile.path)
if self.profile.tempfolder is not None:
shutil.rmtree(self.profile.tempfolder)
except Exception as e:
print(str(e))
Es gibt Dinge, Darauf können Sie sich verlassen: Überprüfen Sie, ob profile.path
vorhanden ist, oder überprüfen Sie den binary.process
-Status. Es könnte funktionieren, aber Sie können auch sehen, dass es nur "externe Anrufe" gibt und es gibt nichts ändert sich auf der Python-Seite, die Ihnen helfen würde, anzuzeigen, dass quit()
aufgerufen wurde.
Mit anderen Worten, benötigen Sie einen externen Anruf zu machen, die Status zu überprüfen:
>>> from selenium.webdriver.remote.command import Command
>>> driver.execute(Command.STATUS)
{u'status': 0, u'name': u'getStatus', u'value': {u'os': {u'version': u'unknown', u'arch': u'x86_64', u'name': u'Darwin'}, u'build': {u'time': u'unknown', u'version': u'unknown', u'revision': u'unknown'}}}
>>> driver.quit()
>>> driver.execute(Command.STATUS)
Traceback (most recent call last):
...
socket.error: [Errno 61] Connection refused
Sie kann unter der try/except
setzen und eine wiederverwendbare Funktion machen:
import httplib
import socket
from selenium.webdriver.remote.command import Command
def get_status(driver):
try:
driver.execute(Command.STATUS)
return "Alive"
except (socket.error, httplib.CannotSendRequest):
return "Dead"
Nutzungs :
>>> driver = webdriver.Firefox()
>>> get_status(driver)
'Alive'
>>> driver.quit()
>>> get_status(driver)
'Dead'
würde Ein weiterer Ansatz WebDriver und stellen Sie die session_id
-None
in quit()
-machen Ihre benutzerdefinierten Firefox sein:
>>> driver = MyFirefox()
>>> print driver.session_id
u'69fe0923-0ba1-ee46-8293-2f849c932f43'
>>> driver.quit()
>>> print driver.session_id
None
Ist für Fahrer Abschlussprüfung notwendig in "Produktionsqualität" -Code? Mit anderen Worten, wie balanciere ich wirklich kugelsicheren Code im Vergleich zu der Zeit, die benötigt wird, um all diese Prüfungen durchzuführen? – franklin
@franklin Ich habe noch nie Browser-Terminierungs-Checks gemacht, während ich selbst Selen benutzt habe und ich denke, dass das OP hier nur einen bestimmten Anwendungsfall hatte. Nicht sicher, ob dies nach dem Beenden des Treibers wirklich benötigt wird. Was denken Sie? – alecxe
Ich war so interessiert, ich habe [hier die Frage gestellt] (http://stackoverflow.com/questions/35426824/optimal-amount-of-testing-for-selenium/) hier. Ich glaube ehrlich, dass die Fehlerquote beim Dekonstruieren eines Objekts in jeder Sprache so gering ist, dass es nicht notwendig ist, es zu testen. – franklin