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

Фотография

ошибка: Element is not currently visible


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

#21 Jenka156

Jenka156

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

  • Members
  • PipPip
  • 137 сообщений
  • ФИО:Женя


Отправлено 12 декабря 2011 - 07:30

ради интереса записал видео, может я не так понял куда надо нажимать
http://clip2net.com/s/1oqKI


ну да, все верно у Вас... у меня также не получается. буду пробовать сегодня

Вот такой костыль работает) Правда только в Firefox)


жаль.... мне надо во всех браузерах
  • 0

#22 Leoxa

Leoxa

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

  • Members
  • Pip
  • 59 сообщений
  • ФИО:Алексей

Отправлено 12 декабря 2011 - 11:25

Вот такой костыль работает) Правда только в Firefox)

жаль.... мне надо во всех браузерах


ну так оставьте костыль для firefox, если проблема воспроизводится только на нем, а на других браузерах костыль не используйте.
а в коде делайте проверку текущего браузера. и всего делов-то.
  • 0

#23 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 12 декабря 2011 - 11:33

В краткосрочной перспективе можно вставить костыль, да.
Но на будущее лучше бы разобраться, почему не работает, и научиться делать без костылей.
Потому что вдруг окажется, что не хватает ещё какого-нибудь события, а потом ещё, и ещё, и ещё...
Именно поэтому так сложно было автоматизировать AJAX-приложения средствами Selenium RC.
И вы предлагаете снова ступить на этот путь к трудносопровождаемым тестам.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#24 D2Phoenix

D2Phoenix

    Постоянный участник

  • Members
  • PipPipPip
  • 200 сообщений
  • ФИО:Чадюк Вадим
  • Город:Гродно


Отправлено 12 декабря 2011 - 12:21

жаль.... мне надо во всех браузерах

ну не то чтобы он не работал))
просто в ie и хроме он и удаляет тег и одновременно нажимает на него)
т.е. получается что тег удаляется и затем открывается страница связаная с этим тегом)

если делать всё средствами webdriver(actions), то:
вообще всё как-то криво работает у мну в firefox'e)т.е. фактически я даже раскрыть список тегов немогу)
в ie и хроме всё нормально) но опять же тег не удаляется а открывается его страница)
вообщем-то как-то зависимости не могу найти)

ps. попробую вечером на ноуте домашнем запустить тесты.... может там будут результаты

да и для полного анализа можете сказать ещё свои версии jdk и ос?
  • 0

#25 Tan_Sid

Tan_Sid

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Сидорова Татьяна

Отправлено 11 декабря 2012 - 07:35

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

<tr id="tr_200" class="odd">
<td class="sorting_1">Аленкина Анна Михайловна</td>
<td class="">врач</td>
<td class="">05.12.2012</td>
<td>
<div class="material-operations invisible" name="200">
<a class="edit-material" onclick="return openPanelUserEditDlg(200)" href="#"></a>
<a class="delete-material" onclick="return deleteMaterialClick($(this), 'deletePanelUser', { data: 'id[]=200' }, 200)" href="#"></a>

нужно навести на строчку с ФИО,затем появляется кнопка редактировать которую нужно нажать.
делала так:
Actions builder;
builder = new Actions(driver);
WebElement el = driver.findElement(By.xpath(".//*[@id='tr_200']/td[1]"));
WebElement edit = driver.findElement(By.cssSelector("a.edit-material"));
builder.moveToElement(el).click(edit).build().perform();
  • 0

#26 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 11 декабря 2012 - 10:09

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

<tr id="tr_200" class="odd">
<td class="sorting_1">Аленкина Анна Михайловна</td>
<td class="">врач</td>
<td class="">05.12.2012</td>
<td>
<div class="material-operations invisible" name="200">
<a class="edit-material" onclick="return openPanelUserEditDlg(200)" href="#"></a>
<a class="delete-material" onclick="return deleteMaterialClick($(this), 'deletePanelUser', { data: 'id[]=200' }, 200)" href="#"></a>

нужно навести на строчку с ФИО,затем появляется кнопка редактировать которую нужно нажать.
делала так:
Actions builder;
builder = new Actions(driver);
WebElement el = driver.findElement(By.xpath(".//*[@id='tr_200']/td[1]"));
WebElement edit = driver.findElement(By.cssSelector("a.edit-material"));
builder.moveToElement(el).click(edit).build().perform();

Может сделать последовательно? Сначала навести с помощью MoveToElement, а после кликать, подождав появления.
  • 0

#27 Tan_Sid

Tan_Sid

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Сидорова Татьяна

Отправлено 11 декабря 2012 - 10:34


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

<tr id="tr_200" class="odd">
<td class="sorting_1">Аленкина Анна Михайловна</td>
<td class="">врач</td>
<td class="">05.12.2012</td>
<td>
<div class="material-operations invisible" name="200">
<a class="edit-material" onclick="return openPanelUserEditDlg(200)" href="#"></a>
<a class="delete-material" onclick="return deleteMaterialClick($(this), 'deletePanelUser', { data: 'id[]=200' }, 200)" href="#"></a>

нужно навести на строчку с ФИО,затем появляется кнопка редактировать которую нужно нажать.
делала так:
Actions builder;
builder = new Actions(driver);
WebElement el = driver.findElement(By.xpath(".//*[@id='tr_200']/td[1]"));
WebElement edit = driver.findElement(By.cssSelector("a.edit-material"));
builder.moveToElement(el).click(edit).build().perform();

Может сделать последовательно? Сначала навести с помощью MoveToElement, а после кликать, подождав появления.



Вы имеете ввиду так:

new Actions(driver).moveToElement(driver.findElement(By.xpath(".//*[@id='tr_200']/td[1]"))).perform();
new Actions(driver).moveToElement(driver.findElement(By.xpath(".//*[@id='tr_200']/td[3]")).findElement(By.cssSelector("a.edit-material"))).click().perform();

он даже не наводит на строку...

а вот так работает только в Opera

WebElement el;
Actions builder = new Actions(driver);
Thread.sleep(1000);
el = driver.findElement(By.cssSelector("a.edit-material"));
Thread.sleep(1000);
builder.moveToElement(el).click(el).build().perform();
Thread.sleep(1000);

правда наводит и открывает только первую строчку
  • 0

#28 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 11 декабря 2012 - 12:52

Вы имеете ввиду так:

new Actions(driver).moveToElement(driver.findElement(By.xpath(".//*[@id='tr_200']/td[1]"))).perform();
new Actions(driver).moveToElement(driver.findElement(By.xpath(".//*[@id='tr_200']/td[3]")).findElement(By.cssSelector("a.edit-material"))).click().perform();

он даже не наводит на строку...

а вот так работает только в Opera

WebElement el;
Actions builder = new Actions(driver);
Thread.sleep(1000);
el = driver.findElement(By.cssSelector("a.edit-material"));
Thread.sleep(1000);
builder.moveToElement(el).click(el).build().perform();
Thread.sleep(1000);

правда наводит и открывает только первую строчку

Ну да, правда я бы, наверное, сделал проще:
new Actions(driver).moveToElement(driver.findElement(By.xpath(".//*[@id='tr_200']/td[1]")).perform();
Thread.Sleep(1000); //на всякий случай
driver.findElement(By.xpath("a.edit-material")).click();

  • 0

#29 Tan_Sid

Tan_Sid

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

  • Members
  • Pip
  • 16 сообщений
  • ФИО:Сидорова Татьяна

Отправлено 12 декабря 2012 - 03:51


Вы имеете ввиду так:

new Actions(driver).moveToElement(driver.findElement(By.xpath(".//*[@id='tr_200']/td[1]"))).perform();
new Actions(driver).moveToElement(driver.findElement(By.xpath(".//*[@id='tr_200']/td[3]")).findElement(By.cssSelector("a.edit-material"))).click().perform();

он даже не наводит на строку...

а вот так работает только в Opera

WebElement el;
Actions builder = new Actions(driver);
Thread.sleep(1000);
el = driver.findElement(By.cssSelector("a.edit-material"));
Thread.sleep(1000);
builder.moveToElement(el).click(el).build().perform();
Thread.sleep(1000);

правда наводит и открывает только первую строчку

Ну да, правда я бы, наверное, сделал проще:
new Actions(driver).moveToElement(driver.findElement(By.xpath(".//*[@id='tr_200']/td[1]")).perform();
Thread.Sleep(1000); //на всякий случай
driver.findElement(By.xpath("a.edit-material")).click();




странно...но не может навести на строчку почему то именно в FF(
валится на
new Actions(driver).moveToElement(driver.findElement(By.xpath(".//*[@id='tr_200']/td[1]")).perform();

в остальных браузерах работает
  • 0

#30 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 25 марта 2013 - 10:56

Че-то у меня теперь у самого не получается навести курсор на невидимый элемент и кликнуть по нему:
<div id="nameContainer" class="editable">
<a class="editstroke pseudo" href="javascript:" title="Редактировать">
<span>редактировать</span>
<i class="icon"></i>
</a>
Div - изначально виден, а ссылка - нет.
Пробую примерно такую конструкцию и другие ее варианты (С#):
new Actions(Driver).MoveToElement(Driver.FindElement(By.Id("nameContainer").Click(Driver.FindElement(By.CssSelector("div#noteContainer a).Build().Perform();

Курсор наводится, но по ссылке не кликает и ошибку не выдает.
  • 0

#31 owasp

owasp

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

  • Members
  • PipPip
  • 87 сообщений

Отправлено 25 марта 2013 - 12:06

Здравствуйте, если посмотрите в исходники Selenium.WebDriver, то там видно, что перед каждым Click() происходит MouseMove на элемент, по которому будет выполняться щелчок. Таким образом, если при смене фокуса кнопка пропадает, то она пропадает и кликнуть по ней нельзя - это нормально (браузер ведёт себя правильно, а тестируемое приложение должно стать более пригодно к тестированию). По этой причине неуверен, что даже руками (не автотестом) удостаться повторить клик по кнопке, которая доступна только когда курсор наведён на другую кнопку.

Но всё же, программно кликнуть по кнопке, не наводя на неё указатель мыши, можно. Если используете dotnet, то смотрите исходный код файла, где выполняется Click():
https://code.google..../ClickAction.cs
    /// <summary>
    /// Defines an action for clicking on an element.
    /// </summary>
    internal class ClickAction : MouseAction, IAction
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="ClickAction"/> class.
        /// </summary>
        /// <param name="mouse">The <see cref="IMouse"/> with which the action will be performed.</param>
        /// <param name="actionTarget">An <see cref="ILocatable"/> describing an element at which to perform the action.</param>
        public ClickAction(IMouse mouse, ILocatable actionTarget)
            : base(mouse, actionTarget)
        {
        }

        #region IAction Members
        /// <summary>
        /// Performs this action.
        /// </summary>
        public void Perform()
        {
            this.MoveToLocation();
            this.Mouse.Click(this.ActionLocation);
        }

        #endregion
    }
Тут видно, что перед щелчком на элемент наводистя указатель мыши.
Значит, если хотите сделать второй клик чистым кликом без наведения курсора мыши на место клика (так-то, считаю это нетестовым случаем), то выполняете не
IWebElement.Click()
, где IWebElement - ваш элемент
а выполняйте
RemoteWebDriver.Mouse.Click(IWebElement)
, где RemoteWebDriver - браузер, а IWebElement - элемент по которому нужно кликнуть.

Также, возможно вам поможет использование нативных событий. *NativeEvents = true - параметр различных браузеров. Возможно, нативные события дадут нужную задержку и корректное поведение. Говорю вот о чём:
            var firefoxProfile = new FirefoxProfile();
            ...
            //Включение режима генерации JavaScript событий (а не имитации их вызова)
            firefoxProfile.EnableNativeEvents = true;
            //Создание драйвера с настройками из профиля
            var browser = new FirefoxDriver(firefoxProfile);

  • 0

#32 Snap

Snap

    Специалист

  • Members
  • PipPipPipPipPip
  • 980 сообщений
  • ФИО:Роман
  • Город:Москва


Отправлено 27 марта 2013 - 07:41

Нет, просто ссылка изначально невидна и навести курсор на нее не выйдет. Приходится наводить на видимый div, в котором она находится. Курсор наводится на блок, он подсвечивается, ссылка становится видимой, но клик по ней все равно не происходит... То, что приложение не очень тестопригодно согласен, судя по кол-ву проблем с наведением курсора WebDriver не очень хорошо работает с такими случаями.
  • 0

#33 MrNone

MrNone

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

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

Отправлено 06 апреля 2017 - 18:39

Возможно, это не будет относится к данному вопросу либо к данной ошибке, но также помогает вставка ДжаваСкриптЭкзикутера для нажатия на такой элемент, который невидим для вебДрайвера. Например -

JavascriptExecutor js = (JavascriptExecutor) driver;

js.executeScript("$('.class').click()");

 

Вполне себе может подойти как решение.


  • 0

#34 MrNone

MrNone

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

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

Отправлено 06 апреля 2017 - 18:50

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


  • 0

#35 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 07 апреля 2017 - 13:13

public void mouseClickTag() {
	JavascriptExecutor js = (JavascriptExecutor) driver;
	js.executeScript(
			"var elements = document.getElementsByClassName('tdtg-removeTag remove');" 
                        + "var evObj = document.createEvent('MouseEvents');"
			+ "evObj.initEvent( 'click', true, false );"
			+ "elements[0].dispatchEvent(evObj);"
                        );

	}
Вот такой костыль работает) Правда только в Firefox)

 

по-моему этот топик освещен в 

 
 

 

и работает во всех б


  • 0

#36 sergueik

sergueik

    Постоянный участник

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 07 апреля 2017 - 13:22

простите пожалуйста - а сайт "хочу попробовать" доступен ?


  • 0


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

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