Это может быть несколько вещей.Возможно, у Selenium возникают проблемы с щелчком якоря, но я на самом деле не слышал об этой проблеме, и это звучит менее вероятно.Похоже, что метод click () возвращает OK, он не дает вам «элемент не найден», верно?Когда вы нажимаете на вкладку jquery, javascript просто не выполняет ожидаемого.По моему опыту, это обычно сводится к одной и той же проблеме - поскольку Selenium выполняется очень быстро, когда javascript визуализирует части страницы и непрерывно воздействует на DOM, когда Selenium взаимодействует с динамически генерируемыми частями страницы (скажем, нажмите на этувкладка), часть, с которой он взаимодействует, зависит от какой-то другой части, которая на самом деле еще не загружена полностью.Это, вероятно, микросекунды от полной загрузки на самом деле, но селен слишком быстро.Конечно, вы уже поняли это, у вас есть правильная идея с условием wait_for, которое ищет вкладки для загрузки.Я думаю, что это, вероятно, просто недостаточно.Вы должны найти некоторую оценку, которая говорит о том, что вся вкладка пользовательского интерфейса загружена и визуализирована.Имеется ли в API вкладок какие-либо обратные вызовы, которые вы можете добавить, чтобы установить переменную «готово», или он предоставляет такую переменную?Если выяснить, каково правильное выражение, чтобы найти момент времени, когда вкладки пользовательского интерфейса фактически готовы к щелчку, что может быть сложно, вы можете использовать прямые паузы, чтобы убедиться, что часть страницы готова перейти доВы взаимодействуете с этим.Я не вижу проблем в sleep (2) или даже sleep (5) и т. Д. В коде, если необходимо заставить его работать.Один из способов проверить, что это действительно так, - запустить сценарий в интерактивном интерпретаторе (должен любить Python, без труда делать это на Java).Вставляйте код построчно, чтобы добраться до проблемной точки, или закомментируйте вызов selenium.stop () в вашем методе разрыва и любой тестовый код после проблемной точки, чтобы оставить окно селена открытым и выйти.Затем создайте экземпляр объекта селена в интерактивном интерпретаторе и взломайте открытый сеанс:
selenium = selenium("localhost", 4444, "*chrome", "http://localhost:8000/")
selenium.sessionId = "0asdd234234023424foo" #Get this from the Se window
..., чтобы получить интерактивное управление окном.Затем вы можете увидеть, как совершать selenium.click()
или совершать selenium.get_eval('...js...')
вызовы, чтобы исследовать ландшафт javascript в тот момент.Я предполагаю, что когда вы сделаете это, click()
будет работать нормально, когда вы наберете его, потому что к моменту загрузки сеанса и начала ввода selenium.click('blah_tab_locator')
, все вкладки будут загружены и готовыидти.Просто, когда Python делает вызовы, он делает это слишком быстро для браузера, когда происходят эти динамические рендеринг.Если щелчок работает нормально, когда вы делаете это вручную через селен, как это, то вы знаете, что это проблема синхронизации.Найдите правильное ожидание для условия или снисходите до питона sleep()
.В противном случае, если щелчок по-прежнему не работает, когда вы делаете это, возможно, это проблема с используемым локатором.Пользовательский интерфейс вкладки имеет щелчок или щелчок мыши, или фокус, или какой-то другой обработчик событий в некоторой части структуры вкладки, возможно, это просто поиск правой части вкладки, которую нужно щелкнуть, или правильное событие, которое нужно запустить.Если это не так, то, возможно, это может быть так, как вы упомянули о каком-то странном взаимодействии между Selenium и Jquery UI, но это удивило бы меня, и мне было бы интересно узнать.Поэкспериментируйте с get_eval (), чтобы увидеть, что происходит в JavaScript, если это так.Это звучит как вопрос времени для меня, хотя.