У вас есть 2 функции в атрибуте onclick
вашей кнопки сохранения. Первый clearDirty()
не определен. Это приводит к тому, что интерпретатор js немедленно останавливается при этой ошибке и не продолжает выполнение второй функции saveForm()
.
Короткая заглушка может быстро обойти: function clearDirty() { }
.
Я бы рекомендовал поместить определение вашей функции saveForm()
плюс заглушку clearDirty()
между тегами script , например:
<script>
function saveForm() {
...
}
function clearDirty() { }
</script>
Если вы это сделаете, вы сможете увидеть, как ваш saveForm()
будет вызван. Но есть и другие проблемы, см. Ниже.
В качестве еще одного теста вы можете даже удалить функцию clearDirty();
из атрибута onclick
вашей кнопки сохранения. Затем вы видите, что функция saveForm()
вызывается правильно.
Форма отправляется в местоположение, указанное атрибутом действия. Если такого атрибута нет или его значение пустое, оно публикуется для себя. В вашем случае местоположение будет: OBS/financial_model_tp_labor_otc.htm
.
Если вы используете функцию submit
элемента с селеном, все кнопки формы будут пропущены, и сама форма будет немедленно отправлена путем разрешения * 1028 формы * атрибут. Это должно работать в любое время, независимо от вашей кнопки и js конфигурации. Если нет, то с вашим сгенерированным html.
действительно что-то не так, я бы действительно предложил использовать html валидатор. Источник html выглядит как исходящий из очень устаревшего инструмента M $. Есть много всего в net. Я использовал W3 C сервис в качестве первого выстрела. Просто укажите свой локальный html -файл и нажмите check .
Помимо проблем с языком и кодировкой символов, отсутствуют закрывающие теги html, о которых сообщалось прямо в внизу инструмента.
И, пожалуйста, заключите в кавычки значения ваших атрибутов, в них есть специальные символы.
edit
Я предоставлю вам маленький образец. Сначала создайте 2 html файла следующим образом.
ta. html:
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<style>
.bkon {
background-color: darkgreen !important;
}
</style>
</head>
<body style="font-family:helvetica;text-align:center">
<div id="frmdiv" style="margin:2em;padding:2em;background-color:lightsalmon;border: solid grey .5em;border-radius:.5em">
<p>
Find the button below which gets the form posted away
</p>
<form action="succ.html" method="post">
<input type="button" value="Save" onclick="clearDirty();btnclk()" />
</form>
</div>
<script>
function btnclk() {
var dv = $("#frmdiv");
if(! dv.hasClass("bkon")) {
dv.addClass("bkon");
}
else {
dv.removeClass("bkon");
}
}
</script>
</body>
</html>
su cc. html:
<!DOCTYPE html>
<html>
<head>
</head>
<body style="font-family:helvetica">
<div style="font-size:2em;background-color:lightgreen;text-align:center;margin-top:2em;padding:.5em;">
<p>
you got the form submitted successfully
</p>
</div>
<p>
<a href="ta.html">go back</a>
</p>
</body>
</html>
Затем Вы можете пройти тест на селен, например:
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get("file:///path/to/test/your/ta.html")
btn = driver.find_element_by_xpath('//input[@value = "Save"]')
time.sleep(2)
btn.click()
time.sleep(2)
btn.submit()
В тесте я использую кнопку формы двумя способами. Во-первых, просто вызывая функцию нажатия кнопки, которая эквивалентна щелчку мышью. Во-вторых, используя функцию отправки.
Я намеренно добавил вашу подозрительную функцию clearDirty()
в атрибут кнопки onclick
, чтобы показать вам, что щелчок селена не удался, но отправка прошла. Удалите функцию clearDirty()
из атрибута onclick
, и вы увидите, что к тому времени срабатывает даже щелчок, который также можно проверить щелчком мыши вручную.