I´ve faced a problem that my one test passes in local but not in CI. I have a progress bar with: positions 0%, 50%, 100% of starting a server, status of starting the server - "Server requested", "Spawning server...", "Server ready at" and status log. I rewrote this case in few times but the result is the same - I got AssertionError, it cannot be catch one of values in CI. I have no so big experience in Selenium and I´m stuck in which way I need to move to fix such problem. I´d appreciate if anyone helps me!!!
while '/spawn-pending/' in browser.current_url or is_displayed(
browser, SpawningPageLocators.PROGRESS_BAR
):
# checking text messages that the server is starting to up
texts = browser.find_elements(*SpawningPageLocators.TEXT_SERVER)
texts_list = []
for text in texts:
text.text
texts_list.append(text.text)
assert str(texts_list[0]) == SpawningPageLocators.TEXT_SERVER_STARTING
assert str(texts_list[1]) == SpawningPageLocators.TEXT_SERVER_REDIRECT
# checking progress of the servers starting (messages, % progress and events log))
logs_list = []
try:
progress_bar = browser.find_element(*SpawningPageLocators.PROGRESS_BAR)
progress = browser.find_elements(*SpawningPageLocators.PROGRESS_MESSAGE)
logs = browser.find_elements(*SpawningPageLocators.PROGRESS_LOG)
for status_message in progress:
progress_messages = status_message.text
percent = (
progress_bar.get_attribute('style')
.split(';')[0]
.split(':')[1]
.strip()
)
for i in range(len(logs)):
progress_log = logs[i].text
logs_list.append(progress_log)
if progress_messages == "":
assert percent == "0%"
assert int(len(logs_list)) == 0
if progress_messages == "Server requested":
assert percent == "0%"
assert int(len(logs_list)) == 1
> assert str(logs_list[0]) == "Server requested"
E AssertionError: assert '' == 'Server requested'
E - Server requested
After rewrote it to
while '/spawn-pending/' in browser.current_url:
progress_message = browser.find_element(
*SpawningPageLocators.PROGRESS_MESSAGE
).text
# checking text messages that the server is starting to up
texts = browser.find_elements(*SpawningPageLocators.TEXT_SERVER)
texts_list = []
for text in texts:
text.text
texts_list.append(text.text)
assert str(texts_list[0]) == SpawningPageLocators.TEXT_SERVER_STARTING
assert str(texts_list[1]) == SpawningPageLocators.TEXT_SERVER_REDIRECT
# checking progress of the servers starting (messages, % progress and events log))
logs_list = []
try:
progress_bar = browser.find_element(*SpawningPageLocators.PROGRESS_BAR)
progress = browser.find_element(*SpawningPageLocators.PROGRESS_MESSAGE)
logs = browser.find_elements(*SpawningPageLocators.PROGRESS_LOG)
percent = (
progress_bar.get_attribute('style').split(';')[0].split(':')[1].strip()
)
for log in logs:
# only include non-empty log messages
# avoid partially-created elements
if log.text:
logs_list.append(log.text)
except (NoSuchElementException, StaleElementReferenceException):
break
expected_messages = [
"Server requested",
"Spawning server...",
f"Server ready at {app.base_url}user/{user.name}/",
]
if progress_message:
assert progress_message in expected_messages
if logs_list:
# race condition: progress_message _should_
# be the last log message, but it _may_ be the next one
assert progress_message
if len(logs_list) < 2:
> assert percent == "0%"
Got : AssertionError: assert '50%' == '0%' on the line "assert percent == "0%"