Пишу автотесты для SPA, и возник такой вопрос. Есть у нас, скажем, страница с пользователями, где можно создать нового, есть ряд полей типа input, куда мы вводим данные - имя, логин, пароль, и т.д. Собственно, пишу я на python, а в качестве IDE у меня PyCharm - внутри него есть удобный дебаггер, а также питоновская консоль, которую я использую для отладки тех или иных вещей. Например, локаторов веб-элементов. Суть кейса: в консоли я запускаю geckodriver и ввожу код:
- он соответствует некому полю ввода, и все работает - в открытом окне драйвера в нужном поле вводятся нужные цифры.
Потом, отладив этот и другие локаторы такого типа, я копирую их в код непосредственно тестов. Мы используем PageObject, в файле локаторов объявляем их списком внутри класса, и выглядят они например так:
NAME = (By.XPATH,"(//input[@type='text'])[4]")
потом класс имплементируется в код теста, ну и все как обычно.
Итак, вопрос: почему в консоли данный тип локаторов работает прекрасно, а при запуске тестов я получаю ошибку:
selenium.common.exceptions.InvalidSelectorException: Message: Given xpath expression "//input[@type='text'])[5]" is invalid: SyntaxError: The expression is not a legal expression.
Только ли потому что тип объявления слегка разный? (find_by_xpath и By.XPATH)