Infinity Loop with `Capture ** Screenshot` when using `{{index}}` (escaped) while file exists
@emanlove đang làm issue này rồi.
Từ ngày 20/1/2024.
Đánh giá
Issue này chưa được đánh giá.
Mô tả
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é
- Ngôn ngữ chính
- Python
- Star
- 1.5k
- Fork
- 787
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của robotframework/SeleniumLibrary
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
robotframework/SeleniumLibrary#1941 · 3 bình luận ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 65/100
robotframework/SeleniumLibrary#1833 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
robotframework/SeleniumLibrary#1436 · 5 bình luận ·
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 58/100
robotframework/SeleniumLibrary#1993 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
robotframework/SeleniumLibrary#1992 · 4 bình luận ·
Tất cả issue của robotframework/SeleniumLibrary
Issue tương tự
-
agent-ready documentation needs-triage
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 88/100
-
documentation
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 91/100
-
workflow-status page template still says reusable workflows are "triggered only by workflow_call:" Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 92/100
-
Add https://search.jeremyh.xyz/ Đang mởinstance instance add
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 72/100
searxng/searx-instances#939 · 1 bình luận ·
-
area-deployment area-integrations triage:bot-seen
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 86/100