Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Infinity Loop with `Capture ** Screenshot` when using `{{index}}` (escaped) while file exists

Offen
#1,882 0 Kommentare 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@emanlove arbeitet bereits daran.

Seit 20.1.2024.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Beschreibung

needs review

The following atest should be updated to this, so that the screenshot is taken twice.

Capture page screenshot with escaped braces
    ${file} =    Capture Page Screenshot    ${OUTPUTDIR}/screenshot-and-index/brackets-{{index}}-name.png
    File Should Exist    ${OUTPUTDIR}/screenshot-and-index/brackets-{index}-name.png
    ${file} =    Capture Page Screenshot    ${OUTPUTDIR}/screenshot-and-index/brackets-{{index}}-name.png    # this line is new!
    Should Be Equal    ${file}    ${OUTPUTDIR}${/}screenshot-and-index${/}brackets-{index}-name.png
    ${file} =    Capture Page Screenshot    ${OUTPUTDIR}/screenshot-and-index/brackets-{{index-name.png
    File Should Exist    ${OUTPUTDIR}/screenshot-and-index/brackets-{index-name.png

The problem is, that the code of _get_screenshot_path() does increment the index and then checks if either the (original) filename is equal to the formatted filename, which would mean that there was no {index} in it, or the file does not exists.

So that mean if the filename is before and after formatting the same, it does not matter if it exists, it will be overwritten.

BUT there is one special feature, that you can include {index} in the final file name, by doubling the braces.

So filename-{{index}}.png will be filename-{index}.png in the filesystem.
The problem now is, that the original filename (filename-{{index}}.png) is not equal with the formatted filename filename-{index}.png and therefore the index is increased. But there is no replaceable index in the original name, so the while loop is infinit.

The fix would be to compare not the original with the formatted, but two formatted with different index numbers with each other.

This is the fixed code:

    def _get_screenshot_path(self, filename):
        if self._screenshot_root_directory != EMBED:
            directory = self._screenshot_root_directory or self.log_dir
        else:
            directory = self.log_dir
        filename = filename.replace("/", os.sep)
        index = 0
        while True:
            index += 1
            formatted = _format_path(filename, index)
            formatted_control = _format_path(filename, sys.maxsize)   # control group with max int
            path = os.path.join(directory, formatted)
            # filename didn't contain {index} or unique path was found
            if formatted == formatted_control or not os.path.exists(path):    # two formatted texts are compared.
                return path

kind regards
René

Vorherrschende Sprache
Python
Sterne
1.5k
Forks
787
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus robotframework/SeleniumLibrary

Alle Issues in robotframework/SeleniumLibrary

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.