PyCharm + pytest + selene - INTERNALERROR

Здравствуй, коллективный разум. Проблема заключается в следующем

Изучал pytest и попытался сделать парочку тестов на связке selene + pytest.

У меня получилось :smiley:
Но вот беда: когда я пытаюсь запускать эти же тесты из PyCharm, выполнение падает с вот каким сообщением:
Код

/home/ilya/PycharmProjects/learning_pytest/venv/bin/python /home/ilya/.local/share/JetBrains/Toolbox/apps/PyCharm-C/ch-0/182.4505.26/helpers/pycharm/_jb_pytest_runner.py --target test_stam.py::test_sum Launching pytest with arguments test_stam.py::test_sum in /home/ilya/PycharmProjects/learning_pytest/test ============================= test session starts ============================== platform linux -- Python 3.6.6, pytest-3.10.0, py-1.7.0, pluggy-0.8.0 rootdir: /home/ilya/PycharmProjects/learning_pytest/test, inifile:collected 1 item test_stam.py INTERNALERROR> Traceback (most recent call last): INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/_pytest/main.py", line 185, in wrap_session INTERNALERROR> session.exitstatus = doit(config, session) or 0 INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/_pytest/main.py", line 225, in _main INTERNALERROR> config.hook.pytest_runtestloop(session=session) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/hooks.py", line 284, in __call__ INTERNALERROR> return self._hookexec(self, self.get_hookimpls(), kwargs) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/manager.py", line 67, in _hookexec INTERNALERROR> return self._inner_hookexec(hook, methods, kwargs) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/manager.py", line 61, in <lambda> INTERNALERROR> firstresult=hook.spec.opts.get("firstresult") if hook.spec else False, INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/callers.py", line 208, in _multicall INTERNALERROR> return outcome.get_result() INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/callers.py", line 80, in get_result INTERNALERROR> raise ex[1].with_traceback(ex[2]) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/callers.py", line 187, in _multicall INTERNALERROR> res = hook_impl.function(*args) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/_pytest/main.py", line 246, in pytest_runtestloop INTERNALERROR> item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/hooks.py", line 284, in __call__ INTERNALERROR> return self._hookexec(self, self.get_hookimpls(), kwargs) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/manager.py", line 67, in _hookexec INTERNALERROR> return self._inner_hookexec(hook, methods, kwargs) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/manager.py", line 61, in <lambda> INTERNALERROR> firstresult=hook.spec.opts.get("firstresult") if hook.spec else False, INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/callers.py", line 208, in _multicall INTERNALERROR> return outcome.get_result() INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/callers.py", line 80, in get_result INTERNALERROR> raise ex[1].with_traceback(ex[2]) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/callers.py", line 187, in _multicall INTERNALERROR> res = hook_impl.function(*args) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/_pytest/runner.py", line 77, in pytest_runtest_protocol INTERNALERROR> runtestprotocol(item, nextitem=nextitem) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/_pytest/runner.py", line 86, in runtestprotocol INTERNALERROR> rep = call_and_report(item, "setup", log) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/_pytest/runner.py", line 176, in call_and_report INTERNALERROR> hook.pytest_runtest_logreport(report=report) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/hooks.py", line 284, in __call__ INTERNALERROR> return self._hookexec(self, self.get_hookimpls(), kwargs) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/manager.py", line 67, in _hookexec INTERNALERROR> return self._inner_hookexec(hook, methods, kwargs) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/manager.py", line 61, in <lambda> INTERNALERROR> firstresult=hook.spec.opts.get("firstresult") if hook.spec else False, INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/callers.py", line 208, in _multicall INTERNALERROR> return outcome.get_result() INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/callers.py", line 80, in get_result INTERNALERROR> raise ex[1].with_traceback(ex[2]) INTERNALERROR> File "/home/ilya/PycharmProjects/learning_pytest/venv/lib/python3.6/site-packages/pluggy/callers.py", line 187, in _multicall INTERNALERROR> res = hook_impl.function(*args) INTERNALERROR> File "/home/ilya/.local/share/JetBrains/Toolbox/apps/PyCharm-C/ch-0/182.4505.26/helpers/pycharm/teamcity/pytest_plugin.py", line 313, in pytest_runtest_logreport INTERNALERROR> self.teamcity.blockOpened(block_name, flowId=test_id) INTERNALERROR> File "/home/ilya/.local/share/JetBrains/Toolbox/apps/PyCharm-C/ch-0/182.4505.26/helpers/pycharm/teamcity/messages.py", line 92, in blockOpened INTERNALERROR> self.message('blockOpened', name=name, flowId=flowId) INTERNALERROR> File "/home/ilya/.local/share/JetBrains/Toolbox/apps/PyCharm-C/ch-0/182.4505.26/helpers/pycharm/_jb_runner_tools.py", line 195, in message INTERNALERROR> current, parent = TREE_MANAGER.node_ids INTERNALERROR> File "/home/ilya/.local/share/JetBrains/Toolbox/apps/PyCharm-C/ch-0/182.4505.26/helpers/pycharm/_jb_runner_tools.py", line 148, in node_ids INTERNALERROR> current = self._get_node_id(self.current_branch) INTERNALERROR> File "/home/ilya/.local/share/JetBrains/Toolbox/apps/PyCharm-C/ch-0/182.4505.26/helpers/pycharm/_jb_runner_tools.py", line 140, in _get_node_id INTERNALERROR> return self._node_ids_dict[".".join(branch)] INTERNALERROR> KeyError: '' 

PyCharm 2018.2, воспроизводится на Ubuntu и Маке.
Гуглил. Похожую проблему нашёл только на форуме software-testing:
http://software-testing.ru/forum/index.php?/topic/36059-python-selene-pytest-pycharm-internalerror-pri-zapuske-testov/

но там тоже ответа не нашли.
Из консоли запускать не вариант, потому, что дебажить неудобно.
Если не обращаться к селену, то падения не происходит.

А, ну да, код:

conftest.py:

@pytest.fixture(scope = "session") def app(request): browser.open_url("https://www.google.com") return True 

test_stam.py:

def test_sum(app): assert 4 == 2 * 2 

Upd:
Сам спросил - сам ответил. Драйвер надо инициализировать в фикстуре.

from selenium import webdriver @pytest.fixture(scope = "session") def app(request): set_driver(webdriver.Chrome()) 

Не думаю, что это полноценное решение проблемы. У меня для каждого теста запускается новый экземпляр драйвера.
Первый тест проходит успешно, при втором - аналогичная беда.

Пример для воспроизведения:

from selene.api import * def setup_function(module): driver = webdriver.Chrome() browser.set_driver(driver) def teardown_function(module): browser.quit() def test_selene(): browser.open_url('http://ya.ru') s('#text').set('Python Selene try 1') s('[type="submit"]').click() def test_selene_2(): browser.open_url('http://ya.ru') s('#text').set('Python Selene try 2') s('[type="submit"]').click() 

та же проблема, не знаю как побороть

Summon @Ayia @Sergey_Pirogov

1 лайк

Хо-хо… У меня пока всего один тест, т.е. возможно меня это ещё ждёт…
Кстати, а зачем каждый раз инициализировать драйвер? Пусть будет на сессию? (у меня-то, собственно, так и будет, ибо логин :))