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

Фотография

Select в виде button. Как с ним работать?


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

#1 Pirokar

Pirokar

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

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

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

Добрый день! Есть проблема... На проекте select сделан на основе button. Вот скрин самого селекта, а вот его html (на скрине весь html относится к этому селекту, не только выделенный). Как с ним работать? 

Подобный код не приносит железного результата, выбирает через раз:

WebElement values = driver.findElement(By.id("statType-custom-rule-new"));
values.click();
Thread.sleep(500);
driver.findElement(By.xpath("./*//*[contains(text(), 'Current week')]")).click();

 


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 833 сообщений


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

Я не вижу чтобы у кнопки был бы хоть какой id... У вас же используется findElement(By.id...

Меняйте локатор.


  • 0

#3 Pirokar

Pirokar

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

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

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

Локатор не при чем. Кусочек кода с другой точно такой же кнопки, у которой есть id. Если я в скобочках напишу "By.xpath("someXpath")" это ничего не изменит. Вопрос же даже был не в этом!


  • 0

#4 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

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

Анимация выпадающего списка есть?
  • 0

#5 Pirokar

Pirokar

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

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

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

Да не, на глаз он просто появляется и все )


  • 0

#6 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

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

1. Увеличите слип до пары секунд, что бы исключить вариант "на глаз".
2. Возможно в некоторых случаях на странице присутствует несколько элементов попадающих под ваш локатор. Проверьте эту гипотезу
System.out.println("Count :"+driver.findElements(By.xpath("./*//*[contains(text(), 'Current week')]")).size());
3. Перед запуском скриптов убирайте мышку из браузера и не трогайте станцию, что бы исключить вариант, что выполнение "через раз" не зависит от состояния ОС.
  • 0

#7 ahmelevsky

ahmelevsky

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Хмелевский Артем

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

 

Подобный код не приносит железного результата, выбирает через раз:

 

Приведите ошибку в случае неудачи, это поможет разобраться.

В любом случае лучше использовать ожидание появления/видимости/доступности элемента списка, чем останавливать поток на полсекунды.


  • 0

#8 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

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

В любом случае лучше использовать ожидание появления/видимости/доступности элемента списка, чем останавливать поток на полсекунды.

Это не догма - исключений масса.
  • 0

#9 ahmelevsky

ahmelevsky

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Хмелевский Артем

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

 

В любом случае лучше использовать ожидание появления/видимости/доступности элемента списка, чем останавливать поток на полсекунды.

Это не догма - исключений масса.

 

А можно что-нибудь из массы?

Смотрите, какая проблема в слипах - да в общем-то никакой, просто они работают либо дольше чем нужно либо короче. В первом случае мы немножко проигрываем во времени, во втором - валимся. Периодическое возникновение второй ситуации и есть та самая нестабильность, о которой, не исключено, пишет автор топика. 

Ситуации "из массы" приводить не нужно, это я так написал. Если мы говорим про ожидание того или иного состояни элемента (а о других ситуациях тут говорить не вижу смысла), слип никак не лучше, просто иногда не получается/невозможно написать ожидание.


  • 0

#10 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

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

Любая анимация, нестабильная верстка при загрузке страницы, "неуловимые" мелкие ajax, да и просто "костыли" в некоторых случаях аля webElement().click();sleep(1);webElement.sendKeys(value); и т.д.
  • 0

#11 Pirokar

Pirokar

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

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

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

А можно что-нибудь из массы?

Смотрите, какая проблема в слипах - да в общем-то никакой, просто они работают либо дольше чем нужно либо короче. В первом случае мы немножко проигрываем во времени, во втором - валимся. Периодическое возникновение второй ситуации и есть та самая нестабильность, о которой, не исключено, пишет автор топика. 

Ситуации "из массы" приводить не нужно, это я так написал. Если мы говорим про ожидание того или иного состояни элемента (а о других ситуациях тут говорить не вижу смысла), слип никак не лучше, просто иногда не получается/невозможно написать ожидание.

 

 

Скажите, как я могу чет-то из селениума дождаться, когда по элементу можно будет кликнуть? isDisplayed уже возвращает true, present и visibility также возвращают true. Т.е. в классе WebDriverWait все возврашает true (я все перепробовал), он бесполезен.


  • 0

#12 vmaximv

vmaximv

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

  • Members
  • PipPipPipPip
  • 350 сообщений

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

Если при свернутом ddl у вас элемент списка isDisplayed==true - говорите версии браузера и драйвера и вебдрайвера.
Тут либо баг, либо вы берете не тот элемент.
  • 0

#13 ahmelevsky

ahmelevsky

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Хмелевский Артем

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

 

А можно что-нибудь из массы?

Смотрите, какая проблема в слипах - да в общем-то никакой, просто они работают либо дольше чем нужно либо короче. В первом случае мы немножко проигрываем во времени, во втором - валимся. Периодическое возникновение второй ситуации и есть та самая нестабильность, о которой, не исключено, пишет автор топика. 

Ситуации "из массы" приводить не нужно, это я так написал. Если мы говорим про ожидание того или иного состояни элемента (а о других ситуациях тут говорить не вижу смысла), слип никак не лучше, просто иногда не получается/невозможно написать ожидание.

 

 

Скажите, как я могу чет-то из селениума дождаться, когда по элементу можно будет кликнуть? isDisplayed уже возвращает true, present и visibility также возвращают true. Т.е. в классе WebDriverWait все возврашает true (я все перепробовал), он бесполезен.

 

Вы все-таки приведите сообщение об ошибке, так будет легче делать предположения.


  • 0

#14 Pirokar

Pirokar

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

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

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

Элемент на странице был и правда не один. Помог такой xpath: (.//*[contains(text(), 'Current week')])[last()]

Всем спасибо!


  • 0


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

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