IndexError masks failures from JavaScript extension keywords with *args
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 75/100
Línea de trabajo
Empieza con _get_selector_value_from_keyword_call() en Browser/browser.py y sigue cómo asigna los valores pasados a la firma de la keyword. Reproduce el problema con la extensión de JavaScript y la prueba de Robot proporcionadas. Se considera terminado cuando el error informa del error original boom: ["a","b"] en lugar de lanzar IndexError.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
When a JavaScript extension keyword declares a parameter named args and is called with multiple positional arguments, a keyword failure can be replaced by an IndexError during Browser’s failure handling. This hides the original exception and makes the failure difficult to diagnose.
To Reproduce
Steps to reproduce the behavior:
JavaScript extension:
async function boom(args) {
throw new Error(`boom: ${JSON.stringify(args)}`);
}
exports.Boom = boom;
Robot test:
*** Test Cases ***
Failure Should Preserve Original Error
Boom a b
Expected behavior
The JavaScript keyword receives both values, but the failure handling path raises IndexError: list index out of range while inspecting the keyword arguments, instead of reporting the original boom: ["a","b"] error.
cause
The generated Python signature turns a JavaScript parameter called args into *args. When _get_selector_value_from_keyword_call() tries to match the values passed to the keyword with the keyword signature, it checks the actual values instead of the signature itself. With multiple values, it can end up looking past the end of the signature and throw an IndexError.
suggested fix
Change _get_selector_value_from_keyword_call() method to:
def _get_selector_value_from_keyword_call(self, name, args, kwargs):
selector = kwargs.get("selector")
if not selector and args:
arguments = self.get_keyword_arguments(name)
for i, arg in enumerate(args):
if i >= len(arguments):
break
spec = arguments[i][0] if isinstance(arguments[i], tuple) else arguments[i]
if spec.startswith("*"):
break
if spec.startswith("selector"):
selector = arg
break
return selector
Desktop (please complete the following information):
- OS: Windows 11
- Browser: chromium
- Version: 151.0.7922.34
- Lenguaje dominante
- Python
- Estrellas
- 662
- Forks
- 149
- Merge medio
- 6 h 13 min
- PR fusionados (30 d)
- 121
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de MarketSquare/robotframework-browser
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
MarketSquare/robotframework-browser#5153 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
MarketSquare/robotframework-browser#5503 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 3/5 1-2 días Aptitud para principiantes 78/100
MarketSquare/robotframework-browser#5502 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 54/100
MarketSquare/robotframework-browser#5501 ·
Los mantenedores suelen responder en 1 día
-
Accept a list of credentials in `httpCredentials` of `New Context` and `New Persistent Context`Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 76/100
MarketSquare/robotframework-browser#5500 ·
Los mantenedores suelen responder en 1 día
Todos los issues de MarketSquare/robotframework-browser
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
igormcsouza/tether#278 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 91/100
aws-samples/sample-per-model-bedrock#803 ·
Los mantenedores suelen responder en 1 día
-
documentation p1
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
huggingface/accelerate#4511 ·
Los mantenedores suelen responder en 1 día
-
follow-up
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día