Перейти к содержимому

Фотография

Элементы с одинаковыми классами. Как выбрать определенный?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 4

#1 Maaaxxx

Maaaxxx

    Новый участник

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Максим

Отправлено 17 июля 2014 - 01:34

Здравствуйте. при тестировании приложения была обнаружена такая вот вещь:

<div class="form-row-indented">
    <label class="form-label-radio">
        <input type="radio" checked="" value="1" name="private"></input>
        Частное лицо
    </label>
    <label class="form-label-radio">
        <input type="radio" value="0" name="private"></input>
        Компания
    </label>
</div>

К первому элементу без проблем могу обратиться:

IWebElement element = mydriver.FindElement(By.XPath("//label[@class='form-label-radio']/input[@value='1']"));

А как обратиться ко второму? Если написать нижеследующее, выдает ошибку

IWebElement element = mydriver.FindElement(By.XPath("//label[@class='form-label-radio']/input[@value='0']"));

Классы одинаковые у label. Что делать?


  • 0

#2 Petrov.Sergey

Petrov.Sergey

    Опытный участник

  • Members
  • PipPipPipPip
  • 446 сообщений
  • ФИО:Petrov Sergey
  • Город:МО, Лобня


Отправлено 17 июля 2014 - 03:22

1) ошибка, потому что value у второго = 0, а не 2 (изначально Вы скопировали сюда "2", а потом исправили на "0"). Исправьте в коде - ошибки не будет.

2) кроме метода FindElement, существует ещё метод FindElements, который находит список элементов, удовлетворяющих условию (список может быть как пустым, так и состоять из одного, двух, десяти элементов). Получив список элементов по классу (без инпута), Вы легко можете взять второй элемент из найденных (если нашлось больше одного).


  • 0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).

#3 Vitalik_V

Vitalik_V

    Активный участник

  • Members
  • PipPip
  • 149 сообщений
  • ФИО:Виталий
  • Город:Харьков

Отправлено 17 июля 2014 - 07:21

Вообще можно искать и по тексту элемента //input[.='Частное лицо'] и Частное лицо //input[.='Компания']


  • 0

#4 Maaaxxx

Maaaxxx

    Новый участник

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Максим

Отправлено 17 июля 2014 - 09:03

1) ошибка, потому что value у второго = 0, а не 2 (изначально Вы скопировали сюда "2", а потом исправили на "0"). Исправьте в коде - ошибки не будет.

2) кроме метода FindElement, существует ещё метод FindElements, который находит список элементов, удовлетворяющих условию (список может быть как пустым, так и состоять из одного, двух, десяти элементов). Получив список элементов по классу (без инпута), Вы легко можете взять второй элемент из найденных (если нашлось больше одного).

Пробовал с 0, тоже не работает.

Спасибо за вариант с массивом, попробую, если не найду способа именно по признаку к конкретному полю обратиться.

 

 

Вообще можно искать и по тексту элемента //input[.='Частное лицо'] и Частное лицо //input[.='Компания']

 

Отличное решение, но не работает... Может что-то не так написал? Может вместо "." перед "=" что-то другое надо ставить? Я не работал с XPath никогда. Документации не нашел.

element = mydriver.FindElement(By.XPath("//input[.='Компания']"));

Нашел почему не работает. Это у label стоит "Компания", а не у input. Поменял на label. Спасибо, теперь все работает))


  • 0

#5 yulia_st

yulia_st

    Новый участник

  • Members
  • Pip
  • 25 сообщений

Отправлено 23 июля 2014 - 13:43

К первому //div[contains(@class, 'form-row-indented')]//label[1]//input

Ко второму //div[contains(@class, 'form-row-indented')]//label[2]//input


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных