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

Фотография

Почему возникает плавающая ошибка InvalidSelectorException

InvalidSelectorException IE11 плавающая ошибка селениум

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

#1 1Aleksandrmd1

1Aleksandrmd1

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Денисов АМ

Отправлено 15 августа 2017 - 07:07

Добрый день!

 

У меня возникает следующая проблема.Возникает плавающая ошибка  InvalidSelectorException, что само по себе странно.

Использую:

selenium 2.53.0

IE 11

драйвер: IEDriverServer_Win32_3.4.0

Я получаю плавающую ошибку:

org.openqa.selenium.InvalidSelectorException: Unable to locate an element with the xpath expression .//input[@value='Очистить'] because of the following error:

Error: Разрешение отклонено (WARNING: The server did not provide any stacktrace information)

Command duration or timeout: 62 milliseconds

For documentation on this error, please visit: http://seleniumhq.or..._exception.html

Build info: version: '2.53.0', revision: '35ae25b1534ae328c771e0856c93e187490ca824', time: '2016-03-15 10:43:46'

System info: host: 'DF3-131016-NE03', ip: '10.80.16.134', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_102'

Driver info: org.openqa.selenium.ie.InternetExplorerDriver

Соответственно элемент на странице существует, более того driver().getPageSource() возвращает во время ошибки: 

...
<TD>
<INPUT class=btn onclick="getSubmit('dcForm', 'clear')" type=button value=Очистить> 
</TD>
...

При явном ожидании элемента, периодически получаю InvalidSelectorException, NoSuchElementException в зависимости от ожидания

 

Попробовал реализовать самостоятельное ожидание 

public WebElement findElementTo(By xpath, int timout){    
            long deadLine = DateManager.getCurrentTimestamp() + (timout*1000);
                while(deadLine > DateManager.getCurrentTimestamp()){
                        try{
                               WebElement WebElement= find(xpath);
                               return WebElement;
                        }catch(Exception e){
                               LOG.info("Ошибкак при получении элемента\n"+Init.getWebDriver().getPageSource()+"\n"+e);
                        }
        }       
                WebElement WebElement= find(xpath);
                return WebElement;             
        }

        private WebElement find(By xpath) throws InvalidSelectorException{     
                WebElement WebElement = Init.getWebDriver().findElement(xpath);        
            if(WebElement.isDisplayed()){
                return WebElement;
            }
            throw new org.openqa.selenium.ElementNotVisibleException("Элемент не виден. Xpath="+xpath+"\n\n\n");
        }       

Соответственно постоянно идет обращение к получению элемента и в течении 10 мин я могу получать ошибку InvalidSelectorException. Замечу это не регулярная ошибка, она периодически возникает на разных элементах. 

На странице используются AJAX запросы 

Как решение проблемы, делаю такие грабли 

public void waitForJQueryLoad(long timeout) { 
                 WebDriverWait wait = new WebDriverWait(Init.getWebDriver(), timeout);
                wait.until(new ExpectedCondition<Boolean>(){ 
                         @Override
                        public Boolean apply(WebDriver driver){
                               Boolean active = false;
                               JavascriptExecutor js = null;
                               try{
                                       js = ((JavascriptExecutor)driver);
                                       active = (Boolean)js.executeScript("return $j.active == 0");
                               }catch(WebDriverException e){
                                       LOG.info("Ошибка драйвера:\n"+e);
                               }
                               LOG.info("$.active="+active);
                               return active; 
                        }
                });
                 try {
                        //Таймаут необходим, для отрисовки элементов DOM, после JQuery запросов.
                        Thread.sleep(250);
                } catch (InterruptedException e) {
                        // TODO Автоматически созданный блок catch
                        e.printStackTrace();
                }

То есть дожидаюсь что бы все AJAX запросы были выполнены и жду построения ДОМ в течении 0,25 сек

 

Но возникает 3 вопроса

1) почему возникает именно ошибка InvalidSelectorException - она же означает, что xpath не валидный, либо возвращается не WebElement, а текст к примеру

в нашем случае тут явно WebElement

2) Единственно, я могу предположить, что ДОМ не успел до строиться,например странно (value=Очистить - почему то без кавычек), но тогда почему при последующих запросах, получения того же элемента WebElement WebElement= find(xpath);, ДОМ не перестраивается для драйвера? То есть если в текущем тесте получили  InvalidSelectorException, то она так и появляется, пока таймаут не закончится. (Приложение отрабатывает корректно)

3) Может не корректная конфигурация? 

 

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


  • 0

#2 Alex

Alex

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

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

Отправлено 15 августа 2017 - 07:34

Добрый день!

 

У меня возникает следующая проблема.Возникает плавающая ошибка  InvalidSelectorException, что само по себе странно.

Использую:

selenium 2.53.0

IE 11

драйвер: IEDriverServer_Win32_3.4.0

Я получаю плавающую ошибку:

org.openqa.selenium.InvalidSelectorException: Unable to locate an element with the xpath expression .//input[@value='Очистить'] because of the following error:

Error: Разрешение отклонено (WARNING: The server did not provide any stacktrace information)

Command duration or timeout: 62 milliseconds

For documentation on this error, please visit: http://seleniumhq.or..._exception.html

Build info: version: '2.53.0', revision: '35ae25b1534ae328c771e0856c93e187490ca824', time: '2016-03-15 10:43:46'

System info: host: 'DF3-131016-NE03', ip: '10.80.16.134', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_102'

Driver info: org.openqa.selenium.ie.InternetExplorerDriver

Соответственно элемент на странице существует, более того driver().getPageSource() возвращает во время ошибки: 

...
<TD>
<INPUT class=btn onclick="getSubmit('dcForm', 'clear')" type=button value=Очистить> 
</TD>
...

При явном ожидании элемента, периодически получаю InvalidSelectorException, NoSuchElementException в зависимости от ожидания

 

Попробовал реализовать самостоятельное ожидание 

public WebElement findElementTo(By xpath, int timout){    
            long deadLine = DateManager.getCurrentTimestamp() + (timout*1000);
                while(deadLine > DateManager.getCurrentTimestamp()){
                        try{
                               WebElement WebElement= find(xpath);
                               return WebElement;
                        }catch(Exception e){
                               LOG.info("Ошибкак при получении элемента\n"+Init.getWebDriver().getPageSource()+"\n"+e);
                        }
        }       
                WebElement WebElement= find(xpath);
                return WebElement;             
        }

        private WebElement find(By xpath) throws InvalidSelectorException{     
                WebElement WebElement = Init.getWebDriver().findElement(xpath);        
            if(WebElement.isDisplayed()){
                return WebElement;
            }
            throw new org.openqa.selenium.ElementNotVisibleException("Элемент не виден. Xpath="+xpath+"\n\n\n");
        }       

Соответственно постоянно идет обращение к получению элемента и в течении 10 мин я могу получать ошибку InvalidSelectorException. Замечу это не регулярная ошибка, она периодически возникает на разных элементах. 

На странице используются AJAX запросы 

Как решение проблемы, делаю такие грабли 

public void waitForJQueryLoad(long timeout) { 
                 WebDriverWait wait = new WebDriverWait(Init.getWebDriver(), timeout);
                wait.until(new ExpectedCondition<Boolean>(){ 
                         @Override
                        public Boolean apply(WebDriver driver){
                               Boolean active = false;
                               JavascriptExecutor js = null;
                               try{
                                       js = ((JavascriptExecutor)driver);
                                       active = (Boolean)js.executeScript("return $j.active == 0");
                               }catch(WebDriverException e){
                                       LOG.info("Ошибка драйвера:\n"+e);
                               }
                               LOG.info("$.active="+active);
                               return active; 
                        }
                });
                 try {
                        //Таймаут необходим, для отрисовки элементов DOM, после JQuery запросов.
                        Thread.sleep(250);
                } catch (InterruptedException e) {
                        // TODO Автоматически созданный блок catch
                        e.printStackTrace();
                }

То есть дожидаюсь что бы все AJAX запросы были выполнены и жду построения ДОМ в течении 0,25 сек

 

Но возникает 3 вопроса

1) почему возникает именно ошибка InvalidSelectorException - она же означает, что xpath не валидный, либо возвращается не WebElement, а текст к примеру

в нашем случае тут явно WebElement

2) Единственно, я могу предположить, что ДОМ не успел до строиться,например странно (value=Очистить - почему то без кавычек), но тогда почему при последующих запросах, получения того же элемента WebElement WebElement= find(xpath);, ДОМ не перестраивается для драйвера? То есть если в текущем тесте получили  InvalidSelectorException, то она так и появляется, пока таймаут не закончится. (Приложение отрабатывает корректно)

3) Может не корректная конфигурация? 

 

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

Я бы решал сначала проблему с Permission Denied. Возможно, это разрешит все. Беглый осмотр гугл показал, что такое может быть при кривых настройках безопасности + есть нюансы по тому, как получается доступ к приложению.

 

Для IE стоит начать с настроек безопасности для данной доменной зоны. + проверить, что protected mode=off для всех зон


  • 0

#3 1Aleksandrmd1

1Aleksandrmd1

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Денисов АМ

Отправлено 15 августа 2017 - 08:05

У меня во всех зонах галка снята для флага - Включить защищенный режим. В реестр так же добавлен параметр iexplore.exe.

Но без этих настроек вообще элемент не определялся бы, почему вы решили, что проблема в настройках IE?

Про другие настройки IE я не где не видел информации.

 

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

Повторюсь ошибка плавающая, тут возможно вообще не верная ошибка определяется, тк если  элемент не найден должна выбрасываться NoSuchElementException, если устарел StaleElementReferenceException, но не как не  InvalidSelectorException, которая пропадает при sleep(3000). 

Я грешу на драйвер для IE.

 

Замечу еще одну странность поставлю sleep(3000) кейс пройдет без ошибок. Поставлю явное ожидание, то в течении всего таймаута падает  InvalidSelectorException, как так?

Получается получаем элемент из ДОМа InvalidSelectorException, и все ДОМ зафиксирован и при повторных обращениях не меняется. Разве это правильная работа?


  • 0

#4 1Aleksandrmd1

1Aleksandrmd1

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Денисов АМ

Отправлено 15 августа 2017 - 08:10

Я хотел бы написать эту ошибку разработчикам seleniuma, но не нашел куда. Тк с официального сайта ссылается на этот форум, думал что тут обитают разработчики, не подскажите существует ли почта для сбора потенциальных багов?


  • 0

#5 Little_CJIOH

Little_CJIOH

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 515 сообщений
  • ФИО:Власкин Павел
  • Город:Санкт-Петербург


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

мммм... ссылка bug tracker в футере главной страницы?
Здесь есть Баранцев, он разработчик селениума.
  • 0

#6 aid

aid

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

  • Members
  • PipPipPipPip
  • 448 сообщений
  • ФИО:Николай


Отправлено 15 августа 2017 - 12:29

selenium 2.53.0

os.arch: 'amd64'

IEDriverServer_Win32_3.4.0


  • 0

#7 1Aleksandrmd1

1Aleksandrmd1

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Денисов АМ

Отправлено 15 августа 2017 - 14:09

Спасибо! 

Раньше хотел перейти на 64 битный драйвер, но была проблем со скоростью выполнения, да и вроде те подсистема для которых писались тесты работали на 32 битном драйвере 

Сейчас скачал последнюю версию IEDriverServer 3.5 Win64, но че то странная ошибка

Смущает строчка из CHANGELOG

Release to synchronize with release of Selenium project. 

он случаем не для селениума 3.*

На сайте http://docs.seleniumhq.org/download/ доступна только последняя версия

 

Ошибка

_[31mMessage: _[0m_[31morg.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.

Build info: version: '2.53.0', revision: '35ae25b1534ae328c771e0856c93e187490ca824', time: '2016-03-15 10:43:46'

System info: host: 'DF3-131016-NE03', ip: '10.80.16.134', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_102'

Driver info: driver.version: RemoteWebDriver

Capabilities [{capabilities={acceptInsecureCerts=false, browserVersion=11, se:ieOptions={nativeEvents=true, browserAttachTimeout=0, ie.ensureCleanSession=false, elementScrollBehavior=0, enablePersistentHover=true, ie.browserCommandLineSwitches=, ie.forceCreateProcessApi=false, requireWindowFocus=false, initialBrowserUrl=http://localhost:26427/, ignoreZoomSetting=false, ie.fileUploadDialogTimeout=3000, ignoreProtectedModeSettings=false}, browserName=internet explorer, pageLoadStrategy=normal, unhandledPromptBehavior=dismiss, platformName=windows, setWindowRect=true}, sessionId=ed7ee0c0-c06b-4440-b5af-8129d0409602, platform=ANY}]

Session ID: null

        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:665)

        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:701)

        at org.openqa.selenium.remote.RemoteWebDriver.getWindowHandles(RemoteWebDriver.java:537)

        at ru.sbt.qa.bdd.Init.disposeInternal(Init.java:455)

        at ru.sbt.qa.bdd.Init.dispose(Init.java:425)

        at ru.sbt.qa.bdd.commonStepDefs.SetupDefsBase.tearDown(SetupDefsBase.java:123)

        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 cucumber.runtime.Utils$1.call(Utils.java:34)

        at cucumber.runtime.Timeout.timeout(Timeout.java:13)

        at cucumber.runtime.Utils.invoke(Utils.java:30)

        at cucumber.runtime.java.JavaHookDefinition.execute(JavaHookDefinition.java:59)

        at cucumber.runtime.Runtime.runHookIfTagsMatch(Runtime.java:222)

        at cucumber.runtime.Runtime.runHooks(Runtime.java:210)

        at cucumber.runtime.Runtime.runAfterHooks(Runtime.java:204)

        at cucumber.runtime.model.CucumberScenario.run(CucumberScenario.java:50)

        at cucumber.runtime.junit.ExecutionUnitRunner.run(ExecutionUnitRunner.java:91)

        at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:63)

        at cucumber.runtime.junit.FeatureRunner.runChild(FeatureRunner.java:18)

        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)

        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)

        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)

        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)

        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)

        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)

        at cucumber.runtime.junit.FeatureRunner.run(FeatureRunner.java:70)

        at cucumber.api.junit.Cucumber.runChild(Cucumber.java:93)

        at cucumber.api.junit.Cucumber.runChild(Cucumber.java:37)

        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)

        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)

        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)

        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)

        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)

        at org.junit.runners.ParentRunner.run(ParentRunner.java:309)

        at cucumber.api.junit.Cucumber.run(Cucumber.java:98)

        at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)

        at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)

        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)

        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)

        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)

        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

Caused by: org.openqa.selenium.WebDriverException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:26427 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect

Build info: version: '2.53.0', revision: '35ae25b1534ae328c771e0856c93e187490ca824', time: '2016-03-15 10:43:46'

System info: host: 'DF3-131016-NE03', ip: '10.80.16.134', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_102'

Driver info: driver.version: RemoteWebDriver

        at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:91)

        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:644)

        ... 42 more

Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:26427 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect

        at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:140)

        at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:314)

        at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363)

        at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219)

        at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195)

        at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:86)

        at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)

        at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)

        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)

        at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)

        at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:144)

        at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:90)

        at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)

        at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)

        ... 43 more

Caused by: java.net.ConnectException: Connection refused: connect

        at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)

        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)

        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)

        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)

        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)

        at java.net.PlainSocketImpl.connect(Unknown Source)

        at java.net.SocksSocketImpl.connect(Unknown Source)

        at java.net.Socket.connect(Unknown Source)

        at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:72)

        at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:117)

        ... 56 more


  • 0

#8 barancev

barancev

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

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


Отправлено 15 августа 2017 - 14:28

Ключевым моментом в сообщении об ошибке является вот это: "Error: Разрешение отклонено"

 

Проблема не в том, что локатор плохой. Проблема в том, что IE капризничает.

 

Возможно, вы выполнили поиск в неподходящий момент времени, IE был не готов, он был занят своими делами и поэтому при попытке получить доступ к какому-то внутреннему ресурсу произошёл отказ -- "разрешение отклонено". В этом случае скорее всего повторная попытка поиска по тому же самому локатору завершится успешно.


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#9 1Aleksandrmd1

1Aleksandrmd1

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Денисов АМ

Отправлено 15 августа 2017 - 15:09

Тут ситуация такая, ошибка возникает стабильно на версии драйвера 3.5, для эксперимента скачал IEDriverServer_Win32_3.5.0 и IEDriverServer_Win64_3.4.0.

Получается на обоих новых драйверах возникает данная ошибка в строке Set<String> windowHandlesSet = Init.getWebDriver().getWindowHandles();

А на драйвере IEDriverServer_Win32_3.4.0  все проходит успешно.

 

Возможно для нового драйвера нужны еще какие нибудь новые настройки. 

А что значит language bindings?

 To successfully use this version of the IE driver, you should be using

    Version 3.5 or above of the language bindings.
 
Сейчас поставил IEDriverServer_Win64_3.4.0,  ошибка последняя не воспроизводится. А проблема с крайне долгим вводом текста как нибудь решается? А то просто не приемлемо ждать заполнения формы секунд 30. на 32 битном драйвере форма заполняется быстро, а здесь просто жуть.

  • 0

#10 barancev

barancev

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

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


Отправлено 15 августа 2017 - 16:29

1) Не используйте 64-битный драйвер. Да, он работает медленно, это известная пробелема для которой нет известного решения.

2) Language binding это клиенская библиотека (та которую для .Net надо подгружать с NuGet)

3) Да, при использовании IEDriverServer версии 3.5 рекомендуется и клиентскую библиотеку тоже брать 3.5

4) Если ошибка стабильно воспроизводится -- пишите багрепорт, вот сюда: https://github.com/S...selenium/issues


  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#11 1Aleksandrmd1

1Aleksandrmd1

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Денисов АМ

Отправлено 16 августа 2017 - 07:29

Спасибо!

 

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


  • 0

#12 1Aleksandrmd1

1Aleksandrmd1

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Денисов АМ

Отправлено 29 августа 2017 - 10:03

Причина ошибки оказалась обработка ошибки WebDriverException, 

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

В общем последствия в виде InvalidSelectorException наступают не сразу, а через определенный момент.

 

Да плохая практика обрабатывать подобные ошибки.


  • 0

#13 1Aleksandrmd1

1Aleksandrmd1

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Денисов АМ

Отправлено 01 сентября 2017 - 06:36

Не много поправлю. Ошибка InvalidSelectorException  возникала из-за обработки WebDriverException. 

Истинная ошибки возникает при получении атрибутов элемента, 

WebDriverException: error determining if element is displayed

NullPointException

Ошибка возникает из-за того, что страница еще загружается при обращении.

Решение

WebDriverWait wait = new WebDriverWait(Init.getWebDriver(), Init.getTimeOutInSeconds());
                wait.until(new ExpectedCondition<Boolean>(){ 
                         @Override
                        public Boolean apply(WebDriver driver){       
                               JavascriptExecutor js = ((JavascriptExecutor)driver);
                             Boolean active = (Boolean)js.executeScript("return document.readyState == 'complete'");
                               return active; 
                        }
                });

Я думал, что селениум автоматически проверяет загрузку страницы, во многих статьях видел такого рода посты, как выясняется драйвер IE этого не делает


  • 0

#14 Snap

Snap

    Специалист

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


Отправлено 01 сентября 2017 - 08:44

...

Я думал, что селениум автоматически проверяет загрузку страницы, во многих статьях видел такого рода посты, как выясняется драйвер IE этого не делает

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


  • 0

#15 1Aleksandrmd1

1Aleksandrmd1

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

  • Members
  • Pip
  • 11 сообщений
  • ФИО:Денисов АМ

Отправлено 01 сентября 2017 - 08:56

Вопрос в какой момент?

 

Ошибка падала именно при ожидании элемента. То есть в опеределенный промежуток времени шла цикличная проверка получение элемент, а дальше определение видимости и вот тут и получалась все радость то WebDriverException: error determining if element is displayed, то NullPointException то есть  элемент не полностью погружается, причем проверял падает и на атрибутах. (Страница имеет FORM, submit)

Решение document.readyState == 'complete' на 100% устранила ошибку

Я полностью уверен, что проверки при команде findElement точно нет. Отсюда и все проблемы.

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


  • 0



Темы с аналогичным тегами InvalidSelectorException, IE11, плавающая ошибка, селениум

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

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