Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can not send report to qase with qase-robotframework #247

Closed
JungPham opened this issue Aug 22, 2024 · 15 comments
Closed

Can not send report to qase with qase-robotframework #247

JungPham opened this issue Aug 22, 2024 · 15 comments

Comments

@JungPham
Copy link

Hi team,

I ran with qase-robotframework==3.0.0, robotframework==7.0 and can not complete run on QASE.
Command:

 robot --listener qase.robotframework.Listener -d Report -v headless:True -v env:dev -v browser:chrome TestSuites/Chat_Flow.robot

Error:

[Qase][23:56:59][error] Error at sending results for run 229: (400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Date': 'Thu, 22 Aug 2024 16:56:59 GMT', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache, private', 'X-RateLimit-Limit': '1500', 'X-RateLimit-Remaining': '1496', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains'})
HTTP response body: {"status":false,"errorMessage":"Data is invalid.","errorFields":[{"field":"results.0.steps.0.steps.1.action","error":"The action must be a string."},{"field":"results.0.steps.0.steps.1","error":"Invalid step result definition."},{"field":"results.0.steps.0","error":"Invalid step result definition."},{"field":"results.0.steps.3.steps.11.steps.1.action","error":"The action must be a string."},{"field":"results.0.steps.3.steps.11.steps.1","error":"Invalid step result definition."},{"field":"results.0.steps.3.steps.11","error":"Invalid step result definition."},{"field":"results.0.steps.3","error":"Invalid step result definition."},{"field":"results.0.steps.9.steps.3.steps.3.action","error":"The action must be a string."},{"field":"results.0.steps.9.steps.3.steps.3","error":"Invalid step result definition."},{"field":"results.0.steps.9.steps.3","error":"Invalid step result definition."},{"field":"results.0.steps.9","error":"Invalid step result definition."},{"field":"results.0","error":"Invalid step result definition."}]}


Exception in thread Thread-3 (_send_results_threaded):
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\threading.py", line 1045, in _bootstrap_inner
    self.run()
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\threading.py", line 982, in run    
    self._target(*self._args, **self._kwargs)
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\commons\reporters\testops.py", line 76, in _send_results_threaded 
    self.client.send_results(self.project_code, self.run_id, results)
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\commons\client\api_v1_client.py", line 127, in send_results       
    api_results.create_result_bulk(
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\pydantic\validate_call_decorator.py", line 60, in wrapper_function     
    return validate_call_wrapper(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\pydantic\_internal\_validate_call.py", line 96, in __call__
    res = self.__pydantic_validator__.validate_python(pydantic_core.ArgsKwargs(args, kwargs))
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\api_client_v1\api\results_api.py", line 445, in create_result_bulk    return self.api_client.response_deserialize(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\api_client_v1\api_client.py", line 321, in response_deserialize   
    raise ApiException.from_response(
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\api_client_v1\exceptions.py", line 143, in from_response
    raise BadRequestException(http_resp=http_resp, body=body, data=data)
qase.api_client_v1.exceptions.BadRequestException: (400)
Reason: Bad Request
HTTP response headers: HTTPHeaderDict({'Date': 'Thu, 22 Aug 2024 16:56:59 GMT', 'Content-Type': 'application/json', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache, private', 'X-RateLimit-Limit': '1500', 'X-RateLimit-Remaining': '1496', 'Strict-Transport-Security': 'max-age=31536000; insport-Security': 'max-age=31536000; includeSubDomains'})
HTTP response body: {"status":false,"errorMessage":"Data is invalid.","errorFields":[{"field":"results.0.steps.0.steps.1.action","error":"The action must be a string."},{"field":"restion must be a string."},{"field":"results.0.steps.0.steps.1","error":"Invalid step result definition."},{"field":"results.0.steps.0","error":"Ild":"results.0.steps.3.steps.11.steps.nvalid step result definition."},{"field":"results.0.steps.3.steps.11.steps.1.action","error":"The action must be a string."},{"field":"results.ld":"results.0.steps.3.steps.11","erro0.steps.3.steps.11.steps.1","error":"Invalid step result definition."},{"field":"results.0.steps.3.steps.11","error":"Invalid step result defini3.steps.3.action","error":"The action tion."},{"field":"results.0.steps.3","error":"Invalid step result definition."},{"field":"results.0.steps.9.steps.3.steps.3.action","error":"The,"error":"Invalid step result definiti action must be a string."},{"field":"results.0.steps.9.steps.3.steps.3","error":"Invalid step result definition."},{"field":"results.0.steps.9.steps.3","error":"Invalid step result definition."},{"field":"results.0.steps.9","error":"Invalid step result definition."},{"field":"results.0","error":"Invalid step result definition."}]}

I try to config debug: true in qase.config.json and rerun again, debug log:

[Qase][00:31:04][debug] Prepared result: {'status': 'passed', 'stacktrace': '', 'time_ms': 6923, 'comment': None, 'attachments': [], 'steps': [{'time': 1473, 'status': 'passed', 'action': 'Click On Team Members Menu', 'steps': [{'time': 1468, 'status': 'passed', 'action': '"${team_name}" == "担当者なし"', 'steps': [{'time': 1466, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 1248, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 25, 'status': 'passed', 'action': '${scroll}', 'steps': [{'time': 24, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 12, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 11, 'status': 'passed', 'action': 
'Execute Javascript'}]}]}, {'time': 187, 'status': 'passed', 'action': 'Click Element'}]}]}, {'time': 3, 'status': 'blocked', 'action': '', 'steps': [{'time': 0, 'status': 'blocked', 'action': 'Common Click Element'}, {'time': 0, 'status': 'blocked', 'action': 'Run Keyword And Return Status'}, {'time': 1, 'status': 'blocked', 'action': '"${status}"=="${False}"', 'steps': [{'time': 0, 'status': 'blocked', 'action': 'Common Click 
Element'}, {'time': 0, 'status': 'blocked', 'action': 'Common Click Element'}]}]}]}, {'time': 1424, 'status': 'passed', 'action': 'Get Conversation Id', 'steps': [{'time': 423, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 286, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 27, 'status': 'passed', 'action': '${scroll}', 'steps': [{'time': 26, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 11, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 14, 'status': 'passed', 'action': 'Execute Javascript'}]}]}, {'time': 101, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 921, 'status': 'passed', 'action': 'Get Location'}, {'time': 2, 'status': 'passed', 'action': 'Split String'}, {'time': 10, 'status': 'passed', 'action': 'Set Variable'}, {'time': 35, 'status': 'passed', 'action': '${i}    IN    @{location}', 'steps': [{'time': 1, 'status': 'passed', 'action': '${i} = https://resola.deca-dev.com/livechat/?status=new', 'steps': [{'time': 1, 'status': 'blocked', 'action': '"cId=" in "${i}"', 'steps': [{'time': 0, 'status': 'blocked', 'action': 'Split String'}, {'time': 0, 'status': 'blocked', 'action': 'Set Variable'}]}]}, {'time': 1, 'status': 'passed', 'action': '${i} = assigned=false', 'steps': [{'time': 0, 'status': 'blocked', 'action': '"cId=" in "${i}"', 'steps': [{'time': 0, 'status': 'blocked', 'action': 'Split String'}, {'time': 0, 'status': 'blocked', 'action': 'Set Variable'}]}]}, {'time': 2, 'status': 'passed', 'action': '${i} = per_page=20', 'steps': [{'time': 0, 'status': 'blocked', 'action': '"cId=" in "${i}"', 'steps': [{'time': 0, 'status': 'blocked', 'action': 'Split String'}, {'time': 0, 'status': 
'blocked', 'action': 'Set Variable'}]}]}, {'time': 25, 'status': 'passed', 'action': '${i} = cId=01j5xj7z89vpm88akcctp8zqjf', 'steps': [{'time': 24, 'status': 'passed', 'action': '"cId=" in "${i}"', 'steps': [{'time': 14, 'status': 'passed', 'action': 'Split String'}, {'time': 5, 'status': 'passed', 'action': 'Set Variable'}]}]}]}, {'time': 12, 'status': 'passed', 'action': 'Set Suite Variable'}, {'time': 3, 'status': 'passed', 
'action': 'Log'}]}, {'time': 283, 'status': 'passed', 'action': 'Verify New Conversation Should Appear On No Assignee List', 'steps': [{'time': 
139, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 17, 'status': 'passed', 'action': 'Page Should Contain Element'}, 
{'time': 19, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 23, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 30, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 28, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 18, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 334, 'status': 'passed', 'action': 'Verify Conversation Infomation On Inbox', 'steps': [{'time': 51, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 16, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 26, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 0, 'status': 'passed', 'action': 'Split String'}, {'time': 3, 'status': 'passed', 'action': 'Set Variable'}, {'time': 32, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 0, 'status': 'passed', 'action': 'Remove String'}, {'time': 71, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 14, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 50, 'status': 'passed', 'action': 'Run Keyword If', 'steps': [{'time': 49, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 25, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 21, 'status': 'passed', 'action': 'JS Get Sender Name Align On Inbox', 'steps': [{'time': 19, 'status': 'passed', 'action': 'Execute Javascript'}, {'time': 0, 'status': 'passed', 'action': ''}]}]}, {'time': 143, 'status': 'passed', 'action': 'Verify Be In Charge Container', 'steps': [{'time': 67, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 40, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 32, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}]}, {'time': 84, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 65, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 16, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 55, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 37, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 16, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 59, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 40, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 17, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 56, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 39, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 15, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 2962, 'status': 'passed', 'action': 'Assign Conversation', 'steps': [{'time': 192, 'status': 'passed', 'action': 'Click On Message', 'steps': [{'time': 192, 'status': 'passed', 'action': 
'Common Click Element', 'steps': [{'time': 49, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 59, 'status': 'passed', 
'action': '${scroll}', 'steps': [{'time': 59, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 47, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 10, 'status': 'passed', 'action': 'Execute Javascript'}]}]}, {'time': 76, 'status': 'passed', 'action': 'Click Element'}]}]}, {'time': 368, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 34, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 23, 'status': 'passed', 'action': '${scroll}', 'steps': [{'time': 22, 'status': 'passed', 'action': 'Scroll 
To Element', 'steps': [{'time': 12, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 7, 'status': 'passed', 'action': 'Execute Javascript'}]}]}, {'time': 306, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 434, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 1207, 'status': 'passed', 'action': 'Common Input Text', 'steps': [{'time': 397, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 0, 'status': 'passed', 'action': 'Evaluate'}, {'time': 0, 'status': 'blocked', 'action': '"${system}" == "Darwin"', 'steps': [{'time': 0, 'status': 'blocked', 'action': 'Press Keys'}]}, {'time': 372, 'status': 'passed', 'action': '', 'steps': [{'time': 371, 'status': 'passed', 'action': 'Press Keys'}]}, {'time': 429, 'status': 'passed', 'action': 'Input Text'}]}, {'time': 364, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 247, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 27, 'status': 'passed', 'action': '${scroll}', 'steps': [{'time': 27, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 18, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 7, 'status': 'passed', 'action': 'Execute Javascript'}]}]}, {'time': 82, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 229, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 35, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 21, 'status': 'passed', 'action': '${scroll}', 'steps': [{'time': 21, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 10, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 9, 'status': 'passed', 'action': 'Execute Javascript'}]}]}, {'time': 162, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 159, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 31, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 23, 'status': 'passed', 'action': '${scroll}', 
'steps': [{'time': 21, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 12, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 8, 'status': 'passed', 'action': 'Execute Javascript'}]}]}, {'time': 100, 'status': 'passed', 'action': 'Click Element'}]}]}], 'param': {}, 'defect': False, 'case': {'title': 'End User Send A Message To Start Conversation via LINE', 'description': '', 'preconditions': None, 'postconditions': None, 'suite_title': 'Chat Flow'}}
[Qase][00:31:04][debug] Run completed


[Qase][00:31:04][error] Error at sending results for run 229: 'charmap' codec can't encode characters in position 293-297: character maps to <undefined>
[Qase][00:31:04][info] Overhead for Qase Report: 3160ms


Exception in thread Thread-3 (_send_results_threaded):
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\threading.py", line 1045, in _bootstrap_inner
    self.run()
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\threading.py", line 982, in run
    self._target(*self._args, **self._kwargs)
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\commons\reporters\testops.py", line 76, in _send_results_threaded 
    self.client.send_results(self.project_code, self.run_id, results)
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\commons\client\api_v1_client.py", line 125, in send_results       
    results_to_send = [self._prepare_result(project_code, result) for result in results]
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\commons\client\api_v1_client.py", line 125, in <listcomp>
    results_to_send = [self._prepare_result(project_code, result) for result in results]
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\commons\client\api_v1_client.py", line 188, in _prepare_result    
    self.logger.log_debug(f"Prepared result: {result_model}")
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\commons\logger.py", line 27, in log_debug
    self.log(message, 'debug')
  File "D:\JungPham\project\tests\e2e-testing\venv\Lib\site-packages\qase\commons\logger.py", line 23, in log
    f.write(log)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'charmap' codec can't encode characters in position 293-297: character maps to <undefined>

=> I find the error at some results has 'action': ''

How can I bypass the error when the value is empty?

@gibiw
Copy link
Contributor

gibiw commented Aug 23, 2024

@JungPham Thank you for your request.
The "action" field cannot be empty. We need to understand why this is happening.
Can you create a small test project where this problem is reproduced and send it to us?

@EugeneChangResola
Copy link

Hi team, c.c @JungPham
This one seems can reproduced the same symptom,
If the keyword or test cases contained "IF ELSE" like below simple test code:

*** Test Cases ***
Simple IF ELSE Test
    Open Browser    about:blank    chrome
    IF    '${test_region}' == 'jp'
        Go To   http://www.google.co.jp
    ELSE
        Go To   https://www.google.com
    END

and if replace "ELSE" to "ESLE IF" like below sample,
It won't encountered the error and sent the result into qase test run correctly for your refereneces.

*** Test Cases ***
Replace ELSE to ELSE IF 
    Open Browser    about:blank    ${test_browser}
    IF    '${test_region}' == 'jp'
        Go To   http://www.google.co.jp
    ELSE IF   '${test_region}' != 'jp'
        Go To   https://www.google.com
    END

@JungPham
Copy link
Author

JungPham commented Aug 28, 2024

Thank you @EugeneChangResola,
I found 2 issues:

  • IF ELSE => We need to change to IF ... ELSE IF
  • RETURN => We need to change to Return from keyword

With case RETURN, it should be changed to Return from keyword but with case IF ELSE, we need to update to IF ELSE IF is not really good, @gibiw

@gibiw
Copy link
Contributor

gibiw commented Aug 28, 2024

We have released a beta version of the reporter with a fix for this issue. Try updating to version qase-robotframework 3.1.1b1
The constructions IF, ELSE, etc. will be ignored. Only running steps will be added to the test.

@gibiw
Copy link
Contributor

gibiw commented Sep 2, 2024

@JungPham @EugeneChangResola Hi! Can you provide feedback on this fix?

@JungPham
Copy link
Author

JungPham commented Sep 3, 2024

Hi @gibiw,

I'm so sorry for responding late, I need time to debug this error. I still can not push the report to QASE, but I think it's a different issue:

Calling method 'end_test' of listener 'qase.robotframework.Listener' failed: IndexError: list index out of range

I found issue relates to these lines, it not work with Windows. I try to update these lines:

file_path = os.path.relpath(attributes["source"], os.getcwd())
signature = '::'.join(file_path.replace("\\", "/").split("/"))

Yeah, it works but the report can not be pushed to true suite, it has been pushed to Test cases without suite :(

qase-robotframework = "3.1.1b1"
command run:

python -m robot -d Report --exclude ignore -v headless:false -L INFO -v pause4failed:false -v env:dev -v browser:chrome --listener qase.robotframework.Listener -s Chat_Flow TestSuites

debug log:

[Qase][23:43:49][debug] Prepared result: {'status': 'passed', 'stacktrace': '', 'time_ms': 3767, 'comment': None, 'attachments': [], 'steps': [{'time': 1918, 'status': 'passed', 'action': 'Click On Team Members Menu', 'steps': [{'time': 1918, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 1873, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 9, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 3, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 3, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 34, 'status': 'passed', 'action': 'Click Element'}]}]}, {'time': 297, 'status': 'passed', 'action': 'Get Conversation Id', 'steps': [{'time': 287, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 241, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 9, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 5, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 3, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 34, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 3, 'status': 'passed', 'action': 'Get Location'}, {'time': 0, 'status': 'passed', 'action': 'Split String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 0, 'status': 'passed', 'action': 'Split String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 0, 'status': 'passed', 'action': 'Set Suite Variable'}, {'time': 0, 'status': 'passed', 'action': 'Log'}]}, {'time': 57, 'status': 'passed', 'action': 'Verify New Conversation Should Appear On No Assignee List', 'steps': [{'time': 14, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 7, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 9, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 5, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 400, 'status': 'passed', 'action': 'Verify Conversation Infomation On Inbox', 'steps': [{'time': 324, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 0, 'status': 'passed', 'action': 'Split String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 9, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 0, 'status': 'passed', 'action': 'Remove String'}, {'time': 14, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 5, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 8, 'status': 'passed', 'action': 'Run Keyword If', 'steps': [{'time': 8, 'status': 'passed', 'action': 'Run Keyword If', 'steps': [{'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}]}]}, {'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 7, 'status': 'passed', 'action': 'JS Get Sender Name Align On Inbox', 'steps': [{'time': 7, 'status': 'passed', 'action': 'Execute Javascript'}, {'time': 0, 'status': 'passed', 'action': 'Return From Keyword'}]}]}, {'time': 44, 'status': 'passed', 'action': 'Verify Be In Charge Container', 'steps': [{'time': 15, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 15, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 13, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}]}, {'time': 55, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 47, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 27, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 21, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 5, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 21, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 13, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 7, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 19, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 13, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 919, 'status': 'passed', 'action': 'Assign Conversation', 'steps': [{'time': 57, 'status': 'passed', 'action': 'Click On Message', 'steps': [{'time': 57, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 13, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 16, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 5, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 11, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 25, 'status': 'passed', 'action': 'Click Element'}]}]}, {'time': 131, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 13, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 12, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 8, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 3, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 104, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 159, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 239, 'status': 'passed', 'action': 'Common Input Text', 'steps': [{'time': 39, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 1, 'status': 'passed', 'action': 'Evaluate'}, {'time': 194, 'status': 'passed', 'action': 'Input Text'}]}, {'time': 116, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 36, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 18, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 8, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 8, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 61, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 117, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 47, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 17, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 7, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 8, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 52, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 93, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 21, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 16, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 11, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 4, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 53, 'status': 'passed', 'action': 'Click Element'}]}]}], 'param': {}, 'param_groups': [], 'defect': False, 'case': {'title': 'End User Send A Message To Start Conversation via LINE', 'description': '', 'preconditions': None, 'postconditions': None, 'suite': 'E2EAutomationTestcases\tChat Flow'}}

[Qase][23:43:50][debug] Sending results for run 347: [{'status': 'passed', 'stacktrace': '', 'time_ms': 3767, 'comment': None, 'attachments': [], 'steps': [{'time': 1918, 'status': 'passed', 'action': 'Click On Team Members Menu', 'steps': [{'time': 1918, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 1873, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 9, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 3, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 3, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 34, 'status': 'passed', 'action': 'Click Element'}]}]}, {'time': 297, 'status': 'passed', 'action': 'Get Conversation Id', 'steps': [{'time': 287, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 241, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 9, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 5, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 3, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 34, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 3, 'status': 'passed', 'action': 'Get Location'}, {'time': 0, 'status': 'passed', 'action': 'Split String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 0, 'status': 'passed', 'action': 'Split String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 0, 'status': 'passed', 'action': 'Set Suite Variable'}, {'time': 0, 'status': 'passed', 'action': 'Log'}]}, {'time': 57, 'status': 'passed', 'action': 'Verify New Conversation Should Appear On No Assignee List', 'steps': [{'time': 14, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 7, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 9, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 5, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 400, 'status': 'passed', 'action': 'Verify Conversation Infomation On Inbox', 'steps': [{'time': 324, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 0, 'status': 'passed', 'action': 'Split String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 9, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 0, 'status': 'passed', 'action': 'Remove String'}, {'time': 14, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 5, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 8, 'status': 'passed', 'action': 'Run Keyword If', 'steps': [{'time': 8, 'status': 'passed', 'action': 'Run Keyword If', 'steps': [{'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}]}]}, {'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 7, 'status': 'passed', 'action': 'JS Get Sender Name Align On Inbox', 'steps': [{'time': 7, 'status': 'passed', 'action': 'Execute Javascript'}, {'time': 0, 'status': 'passed', 'action': 'Return From Keyword'}]}]}, {'time': 44, 'status': 'passed', 'action': 'Verify Be In Charge Container', 'steps': [{'time': 15, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 15, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 13, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}]}, {'time': 55, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 47, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 27, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 21, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 5, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 21, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 13, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 7, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 19, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 13, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 919, 'status': 'passed', 'action': 'Assign Conversation', 'steps': [{'time': 57, 'status': 'passed', 'action': 'Click On Message', 'steps': [{'time': 57, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 13, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 16, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 5, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 11, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 25, 'status': 'passed', 'action': 'Click Element'}]}]}, {'time': 131, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 13, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 12, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 8, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 3, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 104, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 159, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 239, 'status': 'passed', 'action': 'Common Input Text', 'steps': [{'time': 39, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 1, 'status': 'passed', 'action': 'Evaluate'}, {'time': 194, 'status': 'passed', 'action': 'Input Text'}]}, {'time': 116, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 36, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 18, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 8, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 8, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 61, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 117, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 47, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 17, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 7, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 8, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 52, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 93, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 21, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 16, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 11, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 4, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 53, 'status': 'passed', 'action': 'Click Element'}]}]}], 'param': {}, 'param_groups': [], 'defect': False, 'case': {'title': 'End User Send A Message To Start Conversation via LINE', 'description': '', 'preconditions': None, 'postconditions': None, 'suite': 'E2EAutomationTestcases\tChat Flow'}}]

@gibiw
Copy link
Contributor

gibiw commented Sep 4, 2024

@JungPham try to update the qase-robotframework to 3.1.1b2 version

@JungPham
Copy link
Author

JungPham commented Sep 4, 2024

Thank you for being so supportive, @gibiw.
I have upgraded to 3.1.1b2, and I no longer get the issue IndexError: list index out of range.
However, my test case does not push to test suite E2EAutomationTestcases as my config, it still pushes to Test cases without suite. I have set "rootSuite": "E2EAutomationTestcases" in qase.config.json
image

command

python -m robot -d Report --exclude ignore -v headless:false -L INFO -v pause4failed:false -v env:dev -v browser:chrome --listener qase.robotframework.Listener -s Chat_Flow TestSuites

Do I have any wrong config?

@gibiw
Copy link
Contributor

gibiw commented Sep 4, 2024

@JungPham what version of qase-python-commons package are you using? If it's not the latest, then try updating to the latest and check again.

@JungPham
Copy link
Author

JungPham commented Sep 4, 2024

[[package]]
name = "qase-python-commons"
version = "3.1.1"
description = "A library for Qase TestOps and Qase Report"
optional = false
python-versions = ">=3.7"
files = [
    {file = "qase_python_commons-3.1.1-py3-none-any.whl", hash = "sha256:7836831447818a5152362204ba8d83df1a7e3be2d606bb391bab3e96594020d0"},
    {file = "qase_python_commons-3.1.1.tar.gz", hash = "sha256:24b8c6983ac176fcc62787681c9d638e3f015b5d486248e607a963ffb3209f33"},
]

Let me try upgrading qase-python-commons to 3.1.2

@JungPham
Copy link
Author

JungPham commented Sep 4, 2024

Hmm, new error and result does not push to QASE, @gibiw


[Qase][21:48:40][debug] Completing run

[Qase][21:48:40][debug] Prepared result: {'status': 'passed', 'stacktrace': '', 'time_ms': 5367, 'comment': None, 'attachments': [], 'steps': [{'time': 2003, 'status': 'passed', 'action': 'Click On Team Members Menu', 'steps': [{'time': 2001, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 1915, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 13, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 8, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 4, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 69, 'status': 'passed', 'action': 'Click Element'}]}]}, {'time': 692, 'status': 'passed', 'action': 'Get Conversation Id', 'steps': [{'time': 680, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 638, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 9, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 6, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 3, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 30, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 4, 'status': 'passed', 'action': 'Get Location'}, {'time': 1, 'status': 'passed', 'action': 'Split String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 0, 'status': 'passed', 'action': 'Split String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 0, 'status': 'passed', 'action': 'Set Suite Variable'}, {'time': 0, 'status': 'passed', 'action': 'Log'}]}, {'time': 69, 'status': 'passed', 'action': 'Verify New Conversation Should Appear On No Assignee List', 'steps': [{'time': 14, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 10, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 7, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 9, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 9, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 1320, 'status': 'passed', 'action': 'Verify Conversation Infomation On Inbox', 'steps': [{'time': 1177, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 12, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 13, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 0, 'status': 'passed', 'action': 'Split String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 13, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 0, 'status': 'passed', 'action': 'Remove String'}, {'time': 34, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 9, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 12, 'status': 'passed', 'action': 'Run Keyword If', 'steps': [{'time': 12, 'status': 'passed', 'action': 'Run Keyword If', 'steps': [{'time': 11, 'status': 'passed', 'action': 'Page Should Contain Element'}]}]}, {'time': 29, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 8, 'status': 'passed', 'action': 'JS Get Sender Name Align On Inbox', 'steps': [{'time': 7, 'status': 'passed', 'action': 'Execute Javascript'}, {'time': 0, 'status': 'passed', 'action': 'Return From Keyword'}]}]}, {'time': 85, 'status': 'passed', 'action': 'Verify Be In Charge Container', 'steps': [{'time': 36, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 25, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 22, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}]}, {'time': 45, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 33, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 11, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 30, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 19, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 42, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 29, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 11, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 36, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 23, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 12, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 1035, 'status': 'passed', 'action': 'Assign Conversation', 'steps': [{'time': 92, 'status': 'passed', 'action': 'Click On Message', 'steps': [{'time': 91, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 26, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 19, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 9, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 8, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 43, 'status': 'passed', 'action': 'Click Element'}]}]}, {'time': 200, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 23, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 16, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 9, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 6, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 157, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 73, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 327, 'status': 'passed', 'action': 'Common Input Text', 'steps': [{'time': 27, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 1, 'status': 'passed', 'action': 'Evaluate'}, {'time': 293, 'status': 'passed', 'action': 'Input Text'}]}, {'time': 103, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 30, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 20, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 11, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 9, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 50, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 99, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 22, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 15, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 7, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 5, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 58, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 134, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 30, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 27, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 19, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 7, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 73, 'status': 'passed', 'action': 'Click Element'}]}]}], 'param': {}, 'param_groups': [], 'defect': False, 'case': {'title': 'End User Send A Message To Start Conversation via LINE', 'description': '', 'preconditions': None, 'postconditions': None, 'suite_title': 'E2EAutomationTestcases\tChat Flow'}}

[Qase][21:48:40][debug] Prepared result: {'status': 'passed', 'stacktrace': '', 'time_ms': 538, 'comment': None, 'attachments': [], 'steps': [{'time': 52, 'status': 'passed', 'action': 'Verify tab is selected', 'steps': [{'time': 33, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 16, 'status': 'passed', 'action': 'Get Element Attribute'}, {'time': 1, 'status': 'passed', 'action': 'Run Keyword If'}, {'time': 1, 'status': 'passed', 'action': 'Convert To String'}, {'time': 0, 'status': 'passed', 'action': 'Should Be Equal As Strings'}]}, {'time': 353, 'status': 'passed', 'action': 'Verify Conversation Should Be In Stage', 'steps': [{'time': 87, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 21, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 19, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 9, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 8, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 45, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 17, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 245, 'status': 'passed', 'action': 'Capture Page Screenshot'}]}, {'time': 32, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 20, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 10, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 31, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 19, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 10, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 31, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 20, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 11, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 34, 'status': 'passed', 'action': 'Verify right banner is displayed', 'steps': [{'time': 23, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 10, 'status': 'passed', 'action': 'Page Should Contain Element'}]}], 'param': {}, 'param_groups': [], 'defect': False, 'case': {'title': 'Verify flow status incoming sucessfully', 'description': '', 'preconditions': None, 'postconditions': None, 'suite_title': 'E2EAutomationTestcases\tChat Flow'}}

[Qase][21:48:40][debug] Prepared result: {'status': 'passed', 'stacktrace': '', 'time_ms': 11668, 'comment': None, 'attachments': [], 'steps': [{'time': 277, 'status': 'passed', 'action': 'Click On Team Members Menu', 'steps': [{'time': 145, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 33, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 23, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 13, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 7, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 86, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 129, 'status': 'passed', 'action': 'Run Keyword And Return Status', 'steps': [{'time': 127, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 22, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 19, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 10, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 8, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 81, 'status': 'passed', 'action': 'Click Element'}]}]}]}, {'time': 7674, 'status': 'passed', 'action': 'Click On Message', 'steps': [{'time': 7673, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 7579, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 10, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 5, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 5, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 81, 'status': 'passed', 'action': 'Click Element'}]}]}, {'time': 1590, 'status': 'passed', 'action': 'Reply Message With Role', 'steps': [{'time': 1206, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 1148, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 12, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 7, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 3, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 46, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 103, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 14, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 10, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 5, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 4, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 76, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 17, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 0, 'status': 'passed', 'action': 'Generate Random String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 185, 'status': 'passed', 'action': 'Common Input Text', 'steps': [{'time': 12, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 1, 'status': 'passed', 'action': 'Evaluate'}, {'time': 166, 'status': 'passed', 'action': 'Input Text'}]}, {'time': 73, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 28, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 9, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 3, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 3, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 35, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 0, 'status': 'passed', 'action': 'Return From Keyword'}]}, {'time': 771, 'status': 'passed', 'action': 'Verify Conversation Infomation On Inbox', 'steps': [{'time': 10, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 5, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 5, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 0, 'status': 'passed', 'action': 'Split String'}, {'time': 0, 'status': 'passed', 'action': 'Set Variable'}, {'time': 8, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 0, 'status': 'passed', 'action': 'Remove String'}, {'time': 445, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 5, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 7, 'status': 'passed', 'action': 'Run Keyword If', 'steps': [{'time': 7, 'status': 'passed', 'action': 'Run Keyword If', 'steps': [{'time': 6, 'status': 'passed', 'action': 'Page Should Contain Element'}]}]}, {'time': 7, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 269, 'status': 'passed', 'action': 'JS Get Sender Name Align On Inbox', 'steps': [{'time': 267, 'status': 'passed', 'action': 'Execute Javascript'}, {'time': 0, 'status': 'passed', 'action': 'Return From Keyword'}]}]}, {'time': 1351, 'status': 'passed', 'action': 'Verify Conversation Should Be In Stage', 'steps': [{'time': 187, 'status': 'passed', 'action': 'Common Click Element', 'steps': [{'time': 46, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 11, 'status': 'passed', 'action': 'Scroll To Element', 'steps': [{'time': 7, 'status': 'passed', 'action': 'Get WebElement'}, {'time': 4, 'status': 'passed', 'action': 'Execute Javascript'}]}, {'time': 125, 'status': 'passed', 'action': 'Click Element'}]}, {'time': 1018, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 143, 'status': 'passed', 'action': 'Capture Page Screenshot'}]}], 'param': {}, 'param_groups': [], 'defect': False, 'case': {'title': 'Can Reply Message As Official Account', 'description': '', 'preconditions': None, 'postconditions': None, 'suite_title': 'E2EAutomationTestcases\tChat Flow'}}

[Qase][21:48:40][debug] Prepared result: {'status': 'failed', 'stacktrace': 'Element \'//div[@id="livechat_text_editor_container"]//input[@type="search"]\' not visible after 1 minute.', 'time_ms': 60230, 'comment': None, 'attachments': [], 'steps': [{'time': 60229, 'status': 'failed', 'action': 'Reply Message With Role', 'steps': [{'time': 60226, 'status': 'failed', 'action': 'Common Click Element', 'steps': [{'time': 60225, 'status': 'failed', 'action': 'Wait Until Element Is Visible'}]}]}], 'param': {}, 'param_groups': [], 'defect': False, 'case': {'title': 'Can Reply Message As Team', 'description': '', 'preconditions': None, 'postconditions': None, 'suite_title': 'E2EAutomationTestcases\tChat Flow'}}

[Qase][21:48:40][debug] Prepared result: {'status': 'failed', 'stacktrace': 'Element \'//div[@id="livechat_text_editor_container"]//input[@type="search"]\' not visible after 1 minute.', 'time_ms': 60300, 'comment': None, 'attachments': [], 'steps': [{'time': 60298, 'status': 'failed', 'action': 'Reply Message With Role', 'steps': [{'time': 60296, 'status': 'failed', 'action': 'Common Click Element', 'steps': [{'time': 60295, 'status': 'failed', 'action': 'Wait Until Element Is Visible'}]}]}], 'param': {}, 'param_groups': [], 'defect': False, 'case': {'title': 'Can Reply Message As Asignee', 'description': '', 'preconditions': None, 'postconditions': None, 'suite_title': 'E2EAutomationTestcases\tChat Flow'}}

[Qase][21:48:40][debug] Prepared result: {'status': 'failed', 'stacktrace': "Element '//*[contains(@class, 'mantine-Button-label') and text()=normalize-space('後処理')]' not visible after 10 seconds.", 'time_ms': 10450, 'comment': None, 'attachments': [], 'steps': [{'time': 12, 'status': 'passed', 'action': 'Verify red circle number on submenu is not displayed', 'steps': [{'time': 10, 'status': 'passed', 'action': 'Wait Until Element Is Not Visible'}]}, {'time': 36, 'status': 'passed', 'action': 'Verify tab is selected', 'steps': [{'time': 20, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 13, 'status': 'passed', 'action': 'Get Element Attribute'}, {'time': 0, 'status': 'passed', 'action': 'Run Keyword If'}, {'time': 0, 'status': 'passed', 'action': 'Convert To String'}, {'time': 1, 'status': 'passed', 'action': 'Should Be Equal As Strings'}]}, {'time': 84, 'status': 'passed', 'action': 'Verify New Conversation Should Appear', 'steps': [{'time': 35, 'status': 'passed', 'action': 'Wait Until Element Is Visible'}, {'time': 12, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 12, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 11, 'status': 'passed', 'action': 'Page Should Contain Element'}, {'time': 11, 'status': 'passed', 'action': 'Page Should Contain Element'}]}, {'time': 10314, 'status': 'failed', 'action': 'Verify button is display', 'steps': [{'time': 10313, 'status': 'failed', 'action': 'Wait Until Element Is Visible'}]}], 'param': {}, 'param_groups': [], 'defect': False, 'case': {'title': 'Verify flow status ongoing sucessfully (wrap up before end)', 'description': '', 'preconditions': None, 'postconditions': None, 'suite_title': 'E2EAutomationTestcases\tChat Flow'}}

[Qase][21:48:40][error] Error at sending results for run 354: 'charmap' codec can't encode characters in position 159-161: character maps to <undefined>

Exception in thread Thread-3 (_send_results_threaded):
[Qase][21:48:40][debug] Completing run 354
Traceback (most recent call last):

  File "C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\threading.py", line 1045, in _bootstrap_inner
    self.run()
  File "C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\threading.py", line 982, in run
    self._target(*self._args, **self._kwargs)
  File "D:\PROJECT\tests\e2e-testing\venv\Lib\site-packages\qase\commons\reporters\testops.py", line 79, in _send_results_threaded
    self.client.send_results(self.project_code, self.run_id, results)
  File "D:\PROJECT\tests\e2e-testing\venv\Lib\site-packages\qase\commons\client\api_v1_client.py", line 126, in send_results
    results_to_send = [self._prepare_result(project_code, result) for result in results]
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\PROJECT\tests\e2e-testing\venv\Lib\site-packages\qase\commons\client\api_v1_client.py", line 126, in <listcomp>  
    results_to_send = [self._prepare_result(project_code, result) for result in results]
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\PROJECT\tests\e2e-testing\venv\Lib\site-packages\qase\commons\client\api_v1_client.py", line 201, in _prepare_result
    self.logger.log_debug(f"Prepared result: {result_model}")
  File "D:\PROJECT\tests\e2e-testing\venv\Lib\site-packages\qase\commons\logger.py", line 27, in log_debug
    self.log(message, 'debug')
  File "D:\PROJECT\tests\e2e-testing\venv\Lib\site-packages\qase\commons\logger.py", line 23, in log
    f.write(log)
  File "C:\Users\admin\AppData\Local\Programs\Python\Python311\Lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'charmap' codec can't encode characters in position 159-161: character maps to <undefined>
[Qase][21:48:42][info] Run 354 was completed successfully

@JungPham
Copy link
Author

JungPham commented Sep 4, 2024

I think this error relates to 'stacktrace': "Element '//*[contains(@class, 'mantine-Button-label') and text()=normalize-space('後処理')]' not visible after 10 seconds." with the complex characters " and '.

@gibiw
Copy link
Contributor

gibiw commented Sep 5, 2024

@JungPham We can't reproduce this problem, but we have some ideas on how to fix it. Can you email us at support@qase.io and we'll send you a temporary package for testing?

gibiw added a commit that referenced this issue Sep 9, 2024
The logger didn't write logs to the file if the OS used special encoding.

[#247]
gibiw added a commit that referenced this issue Sep 9, 2024
The logger didn't write logs to the file if the OS used special encoding.

[#247]
@gibiw
Copy link
Contributor

gibiw commented Sep 9, 2024

@JungPham try to update qase-robotframework to 3.1.1 version

@gibiw
Copy link
Contributor

gibiw commented Sep 30, 2024

@JungPham Hi! Is the problem resolved?

@gibiw gibiw closed this as completed Oct 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants