SeleniumLibrary icon indicating copy to clipboard operation
SeleniumLibrary copied to clipboard

Keyword `Input Password` throws an exception when run with Python (no robotframework)

Open mikahanninen opened this issue 3 years ago • 2 comments

For issues

Steps to reproduce the issue

from SeleniumLibrary import SeleniumLibrary
from time import sleep

library = SeleniumLibrary()

def minimal_task():
    try:
        library.open_browser('https://docs.robocorp.com')
        library.input_password("//input[@aria-label='Search']", "playwright")
        sleep(5)
    finally:
        library.close_all_browsers()
    print("Done.")


if __name__ == "__main__":
    minimal_task()

Error messages and additional information

Traceback (most recent call last):
  File "task.py", line 23, in <module>
    minimal_task()
  File "task.py", line 15, in minimal_task
    library.input_password("//input[@aria-label='Search']", "playwright")
  File "C:\Users\User\AppData\Local\robocorp\live\199e494e4c733ef3\lib\site-packages\SeleniumLibrary\keywords\formelement.py", line 269, in input_password
    self._input_text_into_text_field(locator, password, clear, disable_log=True)
  File "C:\Users\User\AppData\Local\robocorp\live\199e494e4c733ef3\lib\site-packages\SeleniumLibrary\keywords\formelement.py", line 509, in _input_text_into_text_field
    previous_level = BuiltIn().set_log_level("NONE")
  File "C:\Users\User\AppData\Local\robocorp\live\199e494e4c733ef3\lib\site-packages\robot\libraries\BuiltIn.py", line 3006, in set_log_level
    old = self._context.output.set_log_level(level)
  File "C:\Users\User\AppData\Local\robocorp\live\199e494e4c733ef3\lib\site-packages\robot\libraries\BuiltIn.py", line 64, in _context
    return self._get_context()
  File "C:\Users\User\AppData\Local\robocorp\live\199e494e4c733ef3\lib\site-packages\robot\libraries\BuiltIn.py", line 69, in _get_context
    raise RobotNotRunningError('Cannot access execution context')
robot.libraries.BuiltIn.RobotNotRunningError: Cannot access execution context

Expected behavior and actual behavior

Keyword Input Password works with and without Robot Framework

Environment

Browser: default by Open Browser keyword Browser driver: Gecko Operating System: Windows 10 Libraries

  • Robot Framework: NOT USED
  • Selenium: 3.141.0
  • SeleniumLibrary: robotframework-seleniumlibrary==5.1.3
  • Interpreter: Python 3.7.5 | packaged by conda-forge | (default, Jan 28 2021, 18:15:34) [MSC v.1916 64 bit (AMD64)] on win32

mikahanninen avatar Sep 30 '21 09:09 mikahanninen

Would a fix like this be acceptable?

diff --git a/src/SeleniumLibrary/keywords/formelement.py b/src/SeleniumLibrary/keywords/formelement.pyindex 15ef612..ed38285 100644
--- a/src/SeleniumLibrary/keywords/formelement.py
+++ b/src/SeleniumLibrary/keywords/formelement.py
@@ -17,7 +17,7 @@
 import os
 from typing import Optional, Union

-from robot.libraries.BuiltIn import BuiltIn
+from robot.libraries.BuiltIn import BuiltIn, RobotNotRunningError
 from selenium.webdriver.remote.webelement import WebElement

 from SeleniumLibrary.base import LibraryComponent, keyword
@@ -504,11 +504,17 @@ class FormElementKeywords(LibraryComponent):
         element = self.find_element(locator)
         if clear:
             element.clear()
+
         if disable_log:
-            self.info("Temporally setting log level to: NONE")
-            previous_level = BuiltIn().set_log_level("NONE")
+            try:
+                self.info("Temporally setting log level to: NONE")
+                previous_level = BuiltIn().set_log_level("NONE")
+            except RobotNotRunningError:
+                self.info('RF log levels not available when RF is not running.')
+
         try:
             element.send_keys(text)
         finally:
-            if disable_log:
+            if disable_log and 'previous_level' in locals():
                 BuiltIn().set_log_level(previous_level)

Harri avatar Oct 01 '21 07:10 Harri