Ausgabe
Ich schreibe einen automatisierten Test mit Selenium Python, der ein webbasiertes Tic-Tac-Toe-Spiel spielt. Die Methode checkForWinner() muss die Benutzeroberfläche auf eine Textzeile prüfen, die den Gewinner nach jedem Klick anzeigt, aber die Methode wird nicht aufgerufen, und ich weiß nicht warum.
def checkForWinner(self, load_browser):
if Tags.resultOh:
winner = 'O'
LOGGER.debug('Winner O')
assert winner
elif Tags.resultEx:
winner = 'X'
LOGGER.debug('Winner X')
assert winner
elif Tags.resultTie:
winner = 'None'
LOGGER.debug('Tie')
assert winner
else:
self.test_playGame(load_browser)
Immer wenn das Skript ausgeführt wird, kommt das Spiel zu einem Abschluss und das Skript hängt. Der Browser sollte nach Beendigung des Spiels geschlossen werden, tut es aber nicht. Es wartet offensichtlich auf eine Bedingung, die nicht erfüllt ist, aber ich kann nicht sehen, was es ist.
Lösung
Ich glaube, Sie bleiben in Ihrer for-Schleife stecken, wo Sie die Methode test_PlayTTT() rekursiv aufrufen. Da Sie einen Bot gegen einen anderen spielen, müssen Sie den Zustand des Spielbretts verfolgen, nachdem sich jeder Bot bewegt hat. Im Moment sieht es so aus, als würden Sie nur die Bewegungen dieses Bots verfolgen, aber er kann möglicherweise auf Felder klicken, die bereits vom anderen Spieler beansprucht wurden. Sie möchten, dass clickedSquares Quadrate enthält, auf die der gegnerische Bot geklickt hat, nicht nur dieser.
Die maximale Anzahl an Quadraten, die jeder Spieler markieren kann, ist fünf in einem Tic-Tac-Toe-Spiel, also suchen Sie entweder nach einem Gewinner, nachdem jeder Spieler auf ein Quadrat geklickt hat, oder rufen Sie checkForWinner() auf, wenn die Größe von clickedSquares 5 erreicht.
Beantwortet von – Trevor
Antwort geprüft von – Marie Seifert (FixError Admin)