У меня есть сайт http://demoqa.com/registration/
Я пытался проверить, что когда пользователь нажимает, а затем щелкает обязательное поле, такое как имя пользователя или номер телефона, появляется сообщение об ошибке «Обязательное поле», когда данные не были введены.
Кто-нибудь знает, как это проверить? я подумал
phone = self.driver.find_element_by_xpath("//div[contains(.,'Phone Number')]")
а затем из этого, используя что-то вроде getError = phone.find_element_by_xpath () и используя (..), чтобы попытаться перейти к родительскому классу, но безуспешно!
Я думал, что это будет легко, но все элементы имеют одно и то же имя класса. Полагаю, я мог бы проверить текст «это поле является обязательным», но я хотел бы сохранить его аккуратным и написать метод, чтобы я мог использовать его в каждом из полей.
Я потратил много времени на его поиски и пробовал разные вещи, поэтому любая помощь или идеи были бы замечательными.
Спасибо!
Дополнительная информация:
Я могу сказать вам, что происходит до и после того, как я нажму на поле. Мое лучшее решение для решения этой проблемы - проверить имя класса в поле «номер телефона», а затем после того, как вы его отключите, убедитесь, что имя класса изменилось. Как вы можете видеть, вверху это до того, как щелкнуть, а внизу - когда появится требуемый текст поля.
<div class = "fieldset">
<label class = "" for = "phone_9">Phone Number</label>
<input id = "phone_9" class = "input_fields piereg_validate[required,custom[phone_international]]" type = "text" value = "" placeholder = "" name = "phone_9">
</div>
<div class = "fieldset error">
<label class = "" for = "phone_9">Phone Number</label>
<input id = "phone_9" class = "input_fields
piereg_validate[required,custom[phone_international]]" type = "text" value = ""
placeholder = "" name = "phone_9">
<div class = "legend_txt">
<span class = "legend error">* This field is required</span>
</div>
</div>
Привет, @DebanjanB, у меня действительно мало, потому что я новичок в python, обычно я пишу на C#. Вот код, который я упомянул, пытаясь вернуться к классу temp = self.phone.find_element_by_xpath (".// ancestor :: tr")






Попробуйте использовать приведенный ниже фрагмент кода:
from selenium.common.exceptions import NoSuchElementException
error = "* This field is required"
phone = driver.find_element_by_xpath("//div[label='Phone Number']")
phone_input = phone.find_element_by_tag_name("input")
phone_label = phone.find_element_by_tag_name("label")
phone_input.click()
phone_label.click()
try:
phone.find_element_by_xpath(".//span[@class='legend error' and .='%s']" % error)
except NoSuchElementException:
print("No error displayed")
Это должно позволить вам щелкнуть внутренний ввод, внешний ввод и проверить, появляется ли ошибка.
Если вам нужно сделать утверждение:
result = True
try:
phone.find_element_by_xpath(".//span[@class='legend error' and .='%s']" % error)
except NoSuchElementException:
result = False
assert result, "No error displayed"
У меня есть решение * я думаю
видя, как изменяется "имя класса div" при появлении требуемого сообщения, у меня есть решение. Сначала я нахожу элемент, получаю его имя родителей, поднявшись на один уровень с помощью (..), проверяю, что он должен называться «fieldset». Я думаю вызвать сообщение об ошибке и повторить процесс, но убедитесь, что "fieldset" изменился на "fieldset error"
getElementBase = self.driver.find_element_by_id('phone_9')
getElementClassRoot = getElementBase.find_element_by_xpath('..')
getElementClassRootName = getElementClassRoot.get_attribute('class')
Хороший. Но учтите, что вы должны быть уверены, что приложение работает правильно, и если имя класса "error" добавлено к родительскому div, это на самом деле означает, что span с отображаемым сообщением об ошибке ... Потому что, если есть ошибка - вы можете ее пропустить ... ИМХО, лучше проверить внешний вид элемента в DOM и, кроме того, сделайте утверждение типа assert element.is_displayed()
Хорошая точка зрения! @Andersson Я думаю, что включу в тест оба фрагмента кода, спасибо за вашу помощь
Не могли бы вы обновить вопрос с помощью пробных версий кода?