zavx0z
Для взаимодействия с элементами страницы удобен доступ вида
MainPage.searche_frame.block_resultat.resultats.save_to_db()
Вот к примеру нужно зайти на адрес и кликнуть пагинатор:
MainPage.searche_frame.block_resultat.block_paginator.buttons[2].click()
Или лучше так?
wd.get("http://www.wwwww.ww/www/www/www2352?page=1#post-173417")
searche_frame = wd.find_element_by_id("searche_frime_id")
self.wd.switch_to.frame(searshe_frame)
WebDriverWait(wd, 10).until(lambda driver: driver.find_elements_by_xpath("//locator")).click()
Сама Вселенная ограждает тебя от этого, ломая это в PyCharm'е, но ты упорно не внемлешь её сигналам. Придётся тебе менять мозги, да, это тяжело понять и принять, но вот это
MainPage.searche_frame.block_resultat.resultats.save_to_db()
это очень конкретная лажа. Ты её юзаешь из-за удобства, но это такое же удобство, как юзать глобальные переменные в самом начале (проходил такой этап?), там тоже новички возмущаются “ребята, это же так удобно, можно одну переменную поставить и больше её нигде не надо писать! столько строк экономится, почему это плохо? вы мне всё врёте! вы просто хотите меня на нулевом уровне оставить, чтобы я вас не превзошёл”, а ребята на него смотрят и думают “опять…” и фейспалм делают тихо.
Короче, вот эта хрень, описана во многих книжках. Суть её заключается в том, что ты фиксируешь программу, а программу надо наоборот развязывать, чтобы её части были независимы друг от друга. Переименования - это вообще частая вещь и ты должен в любое время взять и переименовать любую часть без проблем. А ты вот таких вызовов сто штук напишешь (ведущие в разные классы в разных классах), а потом захочешь какую-нибудь переменную переимновать и из-за этого придётся полпрограммы редактировать. Это не самое страшное даже, потому что сейчас вот всякие эти PyCharm'ы стремятся иметь средства для умного рефакторинга, где среда сама ищет, как это всё переименовать одним махом. Но вот когда ты поймаёшь логическую ошибку какую-нибудь в архитектуре, ну, например, тебе надо добавить фичу, совершенно только что придуманную (уже после создания архитектуры), а архитектура программы выстроена так, что не добавишь ты эту фичу, и ты не можешь выбирать, потому что архитектура тебе нафиг не нужна, тебе нужна фича (архитектура - это для программистов, а фича - это для пользователей, для кого и программа, собственно, делается), тогда тебе надо будет перестраивать архитектуру, вообще какие-то фрагменты нахрен удалять и писать вместо них другие, с другими методами.
И вот у тебя вот эта хренотень
MainPage.searche_frame.block_resultat.resultats.save_to_db()
а ты должен удалить searche_frame и переделать resultats кардинально, и всё это независимо друг от друга: одно - для одной фичи, а другое - для исправления бага какого-то внезапного. И что ты будешь делать? Правильно, ты будешь сидеть и заниматься хернёй. Ты будешь заниматься не фичами и не багами, а той хренью, которую ты понавписывал три года назад, когда нихрена не читал книг, где всё это расписано, что я тебе сейчас пишу. Так что учись перестраивать мозги, учись отказываться от всякой устоявшейся хрени, а то так и будешь искать инструменты всё время, а потом однажды не найдёшь что-нибудь и программа погибнет, потому что неправильно срослось что-то в ней, а инструмента нет, чтобы автоматом починить. Следуй общепринятым правилам. Никаких глубоковложенных циклов, никаких глубоковложенных вызовов. Всё это должно между собой через интерфейсы общаться.
zavx0z
Надо, ох как надо автодополнение (широкая структура большой вложенности намечается), а к другой архитектуре кода не хочется прибегать.
А чем тебе jedi
habra в Vim'е не подошло? Оно как раз тупо лазит по содержимому объектов. Но тут как раз дело в том, что если тебе надо это в своём же проекте, то ты уже потерялся.