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

Фотография

Element not clickable


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

#21 lokofc

lokofc

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

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Pavel

Отправлено 26 августа 2013 - 14:36

Нет, это вообще не вариант, не знаю почему, но элемент эти проверки проходит, но не пропадает
  • 0

#22 PavelLobashov

PavelLobashov

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

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

Отправлено 26 августа 2013 - 14:54

Нет, это вообще не вариант, не знаю почему, но элемент эти проверки проходит, но не пропадает

Может у него в CSS что-нито интересное прописывается. Покажите его стиль после того как он не отображается на странице
  • 0

#23 lokofc

lokofc

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

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Pavel

Отправлено 26 августа 2013 - 15:18

В css пусто

Прикрепленные файлы

  • Прикрепленный файл  24.png   28,7К   23 Количество загрузок:

  • 0

#24 vmaximv

vmaximv

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

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

Отправлено 26 августа 2013 - 16:28

А теперь прочитайте внимательнее в документации, что означает stale element, проанализируйте все предыдущие посты. В итоге получите следующий порядок действий:
1. Дождаться элемента.
2. Дождаться его видимости.
3. Дождаться его невидимости.
4.????
5. Profit

В случае фейла пунктов 2 или 3, прочитайте информационный блок сверху топика, и скажите нам уже версию селениума/браузера/драйвера.
  • 0

#25 lokofc

lokofc

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

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Pavel

Отправлено 26 августа 2013 - 16:46

@vmaximv, если Вы не хотите помогать, не помогайте. Я уже приводил выше кусок кода, который четко следует этой последовательности и он не работает.

try { 
        	  
        	   driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);//Ждем этот элемент в течении 3 сек чтобы не затормаживать кейс, если вдруг элемента нет. Можно накать и явную ждалку - результат тотже
	           WebElement kload=driver.findElement(By.xpath("//div[@class='k-loading-image']"));
	           System.out.println(kload.isDisplayed());
	           
	           if (kload.isDisplayed())	{ 	//Проверяем видимость
	        	   
	          (new WebDriverWait(driver, Pause))
	          .until(ExpectedConditions.invisibilityOfElementLocated/stalenessOf(By.xpath("//div[@class='k-loading-image']")));//Если видим, ждем пропадание/невидимости
	          
	          } 
          }
          catch (NoSuchElementException e) {} //ловим експешн, если вдруг элемент не обнаружен       
          driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);//Устанавливает обратно дефолтный таймаут

  • 0

#26 vmaximv

vmaximv

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

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

Отправлено 26 августа 2013 - 17:15

Ничему он не следует. Переведите код на русский язык построчно. isDispalyed! = ожиданию видимости. А output в консоли не показан.
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement kload = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='k-loading-image']"));
wait.until(new ExpectedCondition<Boolean>() {
			@Override
			public Boolean apply(WebDriver arg0) {
				return !kload.isDisplayed();
			}
		});

  • 0

#27 lokofc

lokofc

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

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Pavel

Отправлено 27 августа 2013 - 08:57

На Ваш вариант ругается компилятор.

Такой вариант выкидывает ошибку:
org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

         WebDriverWait wait = new WebDriverWait(driver, 20);
         final WebElement kload= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='k-loading-image']")));       
         wait.until(new ExpectedCondition<Boolean>() {//в этой строке ошибка
                                 @Override                                 
                                 public Boolean apply(WebDriver arg0) {
                                         return !(kload.isDisplayed());
                                 }
                         });

Такой вариант выкидывает NoSuchElement, т к пытается найти kload, а его уже нет

WebDriverWait wait = new WebDriverWait(driver, 20);
         WebElement kload= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='k-loading-image']")));       
         wait.until(new ExpectedCondition<Boolean>() {
                                 @Override                                 
                                 public Boolean apply(WebDriver arg0) {
                                         return !(driver.findElement(By.xpath("//div[@class='k-loading-image']")).isDisplayed());//Вот здесь ошибка
                                 }
                         });

  • 0

#28 vmaximv

vmaximv

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

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

Отправлено 27 августа 2013 - 09:11

WebDriverWait wait = new WebDriverWait(driver, 20);
final WebElement kload= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='k-loading-image']")));
wait.until(ExpectedConditions.stalenessOf(kload));
ЗЫ: компилирую в голове, синтаксические ошибки не исключаю.
  • 0

#29 lokofc

lokofc

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

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Pavel

Отправлено 27 августа 2013 - 10:30

Тут проблема не в синтаксисе, просто это ожидание не работает
  • 0

#30 vmaximv

vmaximv

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

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

Отправлено 27 августа 2013 - 11:08

В случае фейла пунктов 2 или 3, прочитайте информационный блок сверху топика, и укажите версию_селениума/браузера/драйвера+код+полную_трассу.


  • 0

#31 lokofc

lokofc

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

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Pavel

Отправлено 27 августа 2013 - 11:43

Selenium 2.35.0
Chrome Версия 29.0.1547.57 m
Chromedriver=2.0

 
     public void ProjectSelectMethod(String projectclick, String projectname) throws InterruptedException, MyBugException, AWTException {
    	 
    	 int Pause=30;
    	 driver.findElement(By.xpath(projectclick)).click();
         (new WebDriverWait(driver, Pause))
         .until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(".k-grid-string-column")));
         (new WebDriverWait(driver, Pause))
         .until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".k-grid-string-column")));
         
         //Thread.sleep(2000);
       
         driver.findElement(By.xpath("//input[@class='k-textbox'][@value='']")).click();
         driver.findElement(By.xpath("//input[@class='k-textbox'][@value='']")).sendKeys(projectname);
         driver.findElement(By.xpath("//button[@data-commandname='searchBySubstr']")).click();
      
         
         WebDriverWait wait = new WebDriverWait(driver, 20);
         final WebElement kload = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='k-loading-image']")));       
         wait.until(new ExpectedCondition<Boolean>() { // Вот здесь at DocumentRegistration.ProjectSelect.ProjectSelectMethod(ProjectSelect.java:96)

                                 @Override                                 
                                 public Boolean apply(WebDriver arg0) {
                                         return !kload.isDisplayed();
                                 }
                         });
                  
         /* driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
         
          (new WebDriverWait(driver, Pause))
          .until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector(".k-grid-string-column")));
          (new WebDriverWait(driver, Pause))
          .until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//td[.='тест1']")));          
         Thread.sleep(3000);
         
         ElementPolling polling=new ElementPolling(driver);
         String elementPath="//td[.='"+projectname+"']";
         int timeout=60;
         polling.ElementPolling(elementPath, timeout);
         */
     
         

         driver.findElement(By.xpath("//td[.='"+projectname+"']")).click();
         driver.findElement(By.xpath("//button[@data-commandname='accept']")).click();
         Thread.sleep(1000);
         

}

org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
  (Session info: chrome=29.0.1547.57)
  (Driver info: chromedriver=2.0,platform=Windows NT 6.1 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 41 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html
Build info: version: '2.35.0', revision: 'c916b9d', time: '2013-08-12 15:42:01'
System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0'
Session ID: ee131a91395abfaeefd890e9d41b6bd9
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={chromedriverVersion=2.0}, rotatable=false, locationContextEnabled=true, version=29.0.1547.57, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=false, nativeEvents=true, webStorageEnabled=true, applicationCacheEnabled=false, takesScreenshot=true}]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:191)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554)
	at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268)
	at org.openqa.selenium.remote.RemoteWebElement.isDisplayed(RemoteWebElement.java:320)
	at DocumentRegistration.ProjectSelect$1.apply(ProjectSelect.java:99)
	at DocumentRegistration.ProjectSelect$1.apply(ProjectSelect.java:1)
	at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208)
	at DocumentRegistration.ProjectSelect.ProjectSelectMethod(ProjectSelect.java:96)
	at DocumentRegistration.AktSAgentom.AktSAgentomTest(AktSAgentom.java:114)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)



  • 0

#32 vmaximv

vmaximv

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

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

Отправлено 27 августа 2013 - 12:57

С stale element понятно. Я имел ввиду с этим кодом:

WebDriverWait wait = new WebDriverWait(driver, 20);
final WebElement kload= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='k-loading-image']")));
wait.until(ExpectedConditions.stalenessOf(kload));

Да и chromedriver не мешало бы обновить - актуальная версия на данный момент 2.2.
  • 0

#33 Cmorodinka

Cmorodinka

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

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

Отправлено 29 февраля 2016 - 12:57

Где почитать не подскажу, я использую такую конструкцию (Ruby)
xpath_value - xpath элмента, что нужно удалить
@driver.execute_javascript("element = document.evaluate(\"" + xpath_value + "\", document, null, XPathResult.ANY_TYPE, null).iterateNext();if (element !== null) {element.parentNode.removeChild(element);};")

 

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

Отлично помогло на странице, где присутствуют дропдауны плагина select2.

При негативном тестировании (несуществующее значение #select2 в поле поиска) кнопка Save была скрыта select2-drop-mask.

 

P.S. В силу использования Capybara

@driver.execute_javascript

нужно заменить на

page.execute_script

  • 0

#34 MrNone

MrNone

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

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

Отправлено 03 апреля 2016 - 10:10

Я также столкнулся с такой же проблемой. Тема конечно давняя, но если вдруг кто-то еще не разобрался, вот еще один вариант решения этой ситуации. Можно также погуглить и найти вот такой ответ: http://stackoverflow...-at-point-error

Вот кратенько то, что должно быть написано для клика по элементу:

WebElement webElem = driver.findElement(By.something);

Actions action = new Actions(driver);
action.moveToElement(webElem).click().perform();

  • 1

#35 yelissey

yelissey

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

  • Members
  • Pip
  • 1 сообщений
  • ФИО:Ошлоков Елисей

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

Часто спасает обычное ожидание element_to_be_clickable

 

Пример (псевдокод через хэлперы, но идея проста):

1. wait_helper.is_clickable(button) - ждем пока элемент станет кликабельным

2. click_element_helper.click_element(button) - кликаем по нему


  • 0


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

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