У меня есть более сложный вопрос, но я пытаюсь выделить проблему, чтобы избежать путаницы.
Я тестирую страницу, используя селен. На этой странице есть два внешних скрипта javascript. Если вы заходите туда вручную, то страница работает правильно, но при использовании селена один из javascript не загружается:
The script from “http://localhost:55234/static/js/common.js” was loaded even though its MIME type (“text/html”) is not a valid JavaScript MIME type.
2 add-name
Loading failed for the <script> with source “http://localhost:55234/static/js/common.js”.
Проверка источника (щелчок правой кнопкой мыши => просмотреть исходный код страницы) дает мне правильный шаблон с этимдве строки (и другие, конечно):
[...]
<!-- load global javascript -->
<script type='text/javascript' src="/static/js/common.js"></script>
<!-- load app javascript -->
<script type='text/javascript' src="/static/lists/js/lists.js"></script>
[...]
src кликабельны. Кликнув по первой, перезагрузите исходную страницу без строки три и четыре, поэтому без этой строки:
<!-- load app javascript -->
<script type='text/javascript' src="/static/lists/js/lists.js"></script>
При нажатии второй (lists.js
) вы получите код javascript. Но! Но этот код выглядит (очень) старая версия моего кода. Много дней (не слишком ли долго для кэширования?). В то время весь код находился в одном файле JavaScript (lists.js
), а другой (common.js
) не существовало, поэтому это может объяснить, почему не загружается.
Почему это так? Как я могу обновить этот код? Если я зайду вручную на странице, я найду настоящий обновленный код.
Также может быть полезно знать, что в моем браузере я недавно выбрал «Отключить кэш» на вкладке «Сеть» (нажмите F12 с Firefox) и «Отключить кэш HTTP (...)» в настройке, чтобы избежатьэти проблемы. На странице, открытой селеном, эти опции не отмечены. Я попытался проверить оба (используя точку останова ()) и перезагрузить страницу, но ничего не изменилось.
Я повторяю, возможно, причина этого в другом, и есть много других вещей, которые нужно сказать, но я думаю, что лучшеСохраняйте все как можно проще и открывайте другие вопросы, когда мне это нужно. Теперь, есть ли в этом смысл? почему мой скрипт не обновляется в течение нескольких дней (я предпочитаю не очищать кеш, если это возможно)?
Я нашел этот код для удаления кеша, стоит попробовать? Это выглядит правильно?
def setUp(self):
profile = webdriver.FirefoxProfile()
profile.set_preference("browser.cache.disk.enable", False)
profile.set_preference("browser.cache.memory.enable", False)
profile.set_preference("browser.cache.offline.enable", False)
profile.set_preference("network.http.use-cache", False)
self.browser = webdriver.Firefox(profile)
Вот код:
Мой шаблон base.html
:
[...]
<head>
[...]
<!-- load global javascript -->
<script type='text/javascript' src="{% static '/js/common.js' %}"></script>
<!-- load app javascript -->
{% block script %}{% endblock %}
[...]
Мой шаблон list.html
{% block script %}
<script type='text/javascript' src="{% static 'lists/js/lists.js' %}"></script>
{% endblock %}
, где common.js
в myproject/static/js/common.js
, а lists.js
в myproject/lists/static/lists/js/lists.js
. Я звоню обоим с {% static
, но это должно быть правильно.
My test.py
:
class NameFormSeleniumTest(LiveServerTestCase):
def setUp(self):
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(2)
def tearDown(self):
self.browser.quit()
def test_form_can_save_a_name(self):
# some code
# english = ...
self.browser.get(self.live_server_url + '/lists/add-name/')
Select(self.browser.find_element_by_id('id_namelanguage')).\
select_by_value(str(english.id))
# ...
breakpoint()
form = NameForm({'nametype': nome.id, 'gender': maschio.id,
'name': 'Remo', 'namelanguage': english.id,
'usato': 0})
print(form.errors)
form.save()
Ошибка, которую дает тест: (в строке form = ...
):
ValueError: The Name could not be created because the data didn't validate.
и form.error
- это:
<ul class="errorlist"><li>nametype<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
, но с breakpoint()
Я вижу, что функция javascript для добавления параметров в поле не найдена, поле остается пустым, поэтому Select()
не выбирайте ничего, и форма выдает ошибку.
Спасибо за помощь