#java #selenium #xpath #pageobjects
#java #selenium #xpath #pageobjects
Вопрос:
Я пытаюсь автоматизировать веб-сайт, который имеет разные системы показателей. Приложение поддерживает как американскую метрическую систему, так и британскую метрическую систему. Например: если я открываю приложение с американского сервера, я вижу текстовые поля в футах и дюймах, и если я открываю то же приложение с другого сервера, я вижу текстовые поля в сантиметрах.
Я написал свой код так, что сначала он проверяет, присутствует ли элемент текстового поля с футами и дюймами, если он присутствует, то он продолжает и вводит значения в эти текстовые поля, иначе, если футов и дюймов нет, тогда введите значения в текстовое поле Сантиметры.
/*
*
* This block is for the values in US version
*
*/
@FindBy(xpath = ".//*[@id='profile_height_large_value']")
WebElement CurrentHeightinFeet;
@FindBy(xpath = ".//*[@id='profile_height_small_value']")
WebElement CurrentHeightinInches;
/*
* This block is for the values in British version
*
*/
@FindBy(xpath = ".//*[@id='profile_height_display_value']")
WebElement CurrentHeightinCM;
И мой код для проверки, есть ли он в любой версии, приведен ниже.
public void userFitnessDetails() {
CurrentWeight.sendKeys("70");
if (CurrentHeightinFeet.isDisplayed()) {
CurrentHeightinFeet.clear();
CurrentHeightinFeet.sendKeys("5");
CurrentHeightinInches.clear();
CurrentHeightinInches.sendKeys("10");
}
CurrentHeightinCM.clear();
CurrentHeightinCM.sendKeys("170");
}
Если я выполняю приведенный выше код, я получаю сообщение об ошибке —
СБОЙ: регистрация
org.openqa.selenium.Исключение NoSuchElementException: не удается найти элемент:
{"method":"xpath","selector":".//*[@id='profile_height_large_value']"}
Может ли кто-нибудь помочь мне исправить это?
Спасибо
Ответ №1:
Предположения — Вы работаете на британском сервере и сталкиваетесь с проблемами с американскими входными данными длиной в фут. Страница полностью загружена, а элементы полностью доступны, поэтому проблем с ожиданием нет.
Вы столкнетесь с проблемами с isDisplayed()
методом. Он используется, чтобы выяснить, не виден ли элемент, присутствующий на странице, или наоборот, из-за настройки отображения атрибута style. Здесь вы упомянули, что в зависимости от расположения сервера соответствующие html-элементы присутствуют или нет. Если элемент недоступен, вы увидите исключение.
Вы можете использовать более безопасную driver.findElements()
проверку условий вместо isDiplayed()
, которая возвращает список, и вы можете проверить размер, чтобы определить доступность.
Комментарии:
1. Я изменил свой код в соответствии с вашим предложением, однако я столкнулся с проблемой при проверке состояния.
2. @findBy(xpath = «.//*[@id=’profile_height_display_value’]»)) Веб-элемент CurrentHeightinCM; @FindAll(@findBy(id = «profile_goal_weight_display_value»)) Целевой вес веб-элемента; Также при проверке состояния я использую if(CurrentHeightinFeet.size() > 0 amp;amp; CurrentHeightinInches.size() > 0 ){ CurrentHeightinFeet.clear(); CurrentHeightinFeet.SendKeys(«5»); CurrentHeightinInches.clear(); CurrentHeightinInches.SendKeys(«10″); } » Метод SendKeys(строка) не определено для типа List<WebElement>»
3. Вы не можете вызвать SendKeys в списке, который содержит WebElements. Итак, когда размер списка больше 0, то ваше условие выполнено. Элемент, который вы ищете, необходимо извлечь из списка. Используйте метод get(0) в списке, чтобы получить WebElement. А затем используйте метод SendKeys.