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

Фотография

selenium rc и метод isVisible


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

#1 Skuayer

Skuayer

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

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 25 октября 2011 - 14:27

столкнулся с проблемой, когда кнопка находится вне области видимости окна браузера....
а таком случае selenium.isVisible(locator) вовзращает false, что и ожидаемо.

дальше я делаю скролинг окна
selenium.getEval("window.scrollTo(0,550)");

теперь кнопка видна, но selenium.isVisible(locator) возвращает все равно false...

подскажите в чем может быть проблема....

//selenium rc, java
  • 0

#2 Demetri

Demetri

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

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 25 октября 2011 - 16:05

Может быть происходит изменение локатора при наведении мыши? Типа виден один элемент, наводим мышь - скрывается один элемент, отображается другой
  • 0
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#3 Skuayer

Skuayer

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

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 25 октября 2011 - 16:30

не думаю.... selenium.click(locator)
работает нормально.
  • 0

#4 Demetri

Demetri

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

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 25 октября 2011 - 17:16

Есть такая особенность, что Selenium RC умеет кликать по скрытым элементам

Пример страницы или хотя бы участок кода с локатором посмотреть можно?
  • 0
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#5 Skuayer

Skuayer

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

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 26 октября 2011 - 07:55

<table id="BackButton" class="x-button " cellspacing="0" cellpadding="0" align="center">
<tbody>
<tr>
<td class="x-button-left" width="6">
</td>
<td class="x-button-middle" nowrap="nowrap" width="100%" style="padding: 4px 5px 0pt; background: url("../form/button-middle.gif") repeat-x scroll left top transparent;">&lt; Back</td>
<td width="6">
</td>
</tr>
</tbody>
</table>

локатор соответсвенно //td[contains(text(), 'Back')]

а вот с таким локатором заработало....
//table[@id='BackButton']/tbody/tr/td[2]
  • 0

#6 Demetri

Demetri

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

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 26 октября 2011 - 07:59

Можно еще такой локатор попробовать:
//table[@id='BackButton']//td[contains(text(), 'Back')]
просто, судя по всему, где-то на странице присутствует еще один скрытый локатор, который удовлетворяет локатору
//td[contains(text(), 'Back')]

  • 0
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#7 Skuayer

Skuayer

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

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 26 октября 2011 - 08:22

Можно еще такой локатор попробовать:

//table[@id='BackButton']//td[contains(text(), 'Back')]
просто, судя по всему, где-то на странице присутствует еще один скрытый локатор, который удовлетворяет локатору
//td[contains(text(), 'Back')]


да, реально оказалось, что на странице оказалась еще одна такая кнопка, от старого функционала (скрытая), которая и подходила под тот же локатор....
  • 0

#8 JekaterinaGulbinova

JekaterinaGulbinova

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

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

Отправлено 01 ноября 2011 - 15:43

Здравствуйте! Снова ищу Вашей помощи..

В общем, старая проблема с логином и паролем. Но на другом сайте. И вот поле пароль при выполнении кода на isDisplayed() возвращает false, хотя судя по source страницы должен показываться нормально.

        <input type="password" maxlength="255" value="" placeholder="Şifre" id="tbPassword" tabindex="2"/>
        <input type="email" maxlength="255" value="" placeholder="Kullanıcı Adı" id="tbUsername" tabindex="1"/>

Это 100% единственное такое поле, а также единственное, отвечающее запросу. Запрос пробовала по id (tbPassword), по xpath (//section[@class='account']/fieldset/input[@id='tbUsername']) - не помогает.

Если просматриваю соседнее поле (логин) с помощью плаг-ина в FireFox (Inspect Element), то для поля Пароля вижу такой код:

<input id="tbPassword" type="password" tabindex="2" placeholder="Şifre" value="" maxlength="255" style="display: none;">
<input class="password-replaced placeholder" type="text" tabindex="2">

Т.е. поле tbPassword дейстивтельно не видно. Но я никак не могу понять, в какой момент происходит изменение. По крайней мере, пробовала сначала кликать поле по Имени Класса (password-replaced placeholder) - но Селениум это поле просто не находит ( ошибка на WebElement element = driver.findElement(By.className("password-replaced placeholder"));).

С помощью Selenium IDE вижу, что записывается по id("tbPassword"), но при попытке запуска теста поле не изменяется, никакой ошибки не выдает.

На:

WebElement element = driver.findElement(By.id("tbPassword"));

ошибки нет, но элемент возвращает false на isDisplayed()

Уже не знаю, с какой стороны подойти к этому монстру :)

https://www.casinomaxi2.com/tr/
  • 0

#9 Skuayer

Skuayer

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

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 01 ноября 2011 - 16:24

у вас получается на странице следующее:
- сначала отображается элемент в поле пароля
<input class="password-replaced placeholder" type="text" tabindex="2">
-после того как вы кликаете по нему оно исчезает и появляетя уже
<input id="tbPassword" type="password" tabindex="2" placeholder="Şifre" value="" maxlength="255" style="display: block;">

по такой логике, перед тем как вставлять пароль нужно кликнуть по первому элементу и передать значение во второй.
  • 0

#10 JekaterinaGulbinova

JekaterinaGulbinova

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

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

Отправлено 01 ноября 2011 - 16:28

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


Да, я так и делала с другими сайтами, но здесь на команду

WebElement element = driver.findElement(By.className("password-replaced placeholder"));

выдает ошибку null pointer exception. Т.е. такой элемент вообще не находит. :( И я не могу его кликнуть
  • 0

#11 Skuayer

Skuayer

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

  • Members
  • PipPip
  • 115 сообщений
  • ФИО:Жуков Анатолий Викторович
  • Город:Санкт-Петербург

Отправлено 01 ноября 2011 - 16:57

вот так у меня заработало)
WebElement prePasswordField = driver.findElement(By.xpath("//*[@class='password-replaced placeholder']"));
passwordBehavior.click();
WebElement passwordField = driver.findElement(By.id("tbPassword"));
password.sendKeys("test");

у меня падает ошибка в вашем случае другая:
org.openqa.selenium.IllegalLocatorException: Compound class names are not supported. Consider searching for one class name and filtering the results.

похоже webdriver не может искать элемент по имени класса, если в нем есть пробел
  • 1

#12 Demetri

Demetri

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

  • Members
  • PipPip
  • 143 сообщений
  • ФИО:Дмитрий
  • Город:Podgorica, MNE


Отправлено 02 ноября 2011 - 02:39

Скрипт:
wd.get("https://www.casinomaxi2.com/tr/");
wd.findElement(By.xpath("//*[@class='password-replaced placeholder']")).click();	
System.out.println("Visible: "+wd.findElement(By.id("tbPassword")).isDisplayed());
Результат:
Visible: true
Проверено в FF 6.0.2 и IE9
  • 1
Hi! I'm a signature virus. Copy me into your signature to help me spread.

#13 JekaterinaGulbinova

JekaterinaGulbinova

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

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

Отправлено 02 ноября 2011 - 09:11

Большое спасибо!

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

:clapping:
  • 0


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

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