неверный селектор: невозможно найти элемент с ошибкой выражения xpath в ChromeDriver и Chrome с помощью Selenium - PullRequest
0 голосов
/ 14 января 2020

У меня сейчас проблема с Selenium и findElements (By.xpath ()).

В настоящее время я автоматизируюсь на Salesforce (идентификаторы Dynami c и используем text (), поэтому мы не можем использовать селекторы CSS), и хотя мой XpathFinder (Chrome AddOn) может обрабатывать Xpath Селен выдает следующую ошибку:

    invalid selector: Unable to locate an element with the xpath expression 

//div[contains(@class,'windowViewMode-normal')]//div[@class='slds-tabs_default' and not(ancestor::* 
     [contains(@class,'sidebar')])]//force-record-layout-item//(span[not(contains(@class,'assistive') 
     or @class='slds-checkbox' or contains(@class,'slds-button') or contains(@class,'test-id__field- 
     value') or contains(@class,'flex-wrap') or contains(@class,'avatar'))]|a|emailui-formatted-email- 
     wrapper//div[not(*)]|lightning-formatted-text|lightning-formatted-number[text()]|lightning- 
     formatted-name|lightning-formatted-phone[not(*)]|lightning-formatted-address[not(*)]) 
because of the following error:
    SyntaxError: Failed to execute 'evaluate' on 'Document': The string 
    '//div[contains(@class,'windowViewMode-normal')]//div[@class='slds-tabs_default' and 
    not(ancestor::*[contains(@class,'sidebar')])]//force-record-layout-                
    item//(span[not(contains(@class,'assistive') or @class='slds-checkbox' or contains(@class,'slds- 
    button') or contains(@class,'test-id__field-value') or contains(@class,'flex-wrap') or 
    contains(@class,'avatar'))]|a|emailui-formatted-email-wrapper//div[not(*)]|lightning-formatted- 
    text|lightning-formatted-number[text()]|lightning-formatted-name|lightning-formatted- 
    phone[not(*)]|lightning-formatted-address[not(*)])' 
is not a valid XPath expression.
(Session info: chrome=79.0.3945.117)
(Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),
platform=Windows NT 10.0.17763 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds

Проблема в группировке после

//div[contains(@class,'windowViewMode-normal')]//div[@class='slds-tabs_default' and not(ancestor::* 
 [contains(@class,'sidebar')])]//force-record-layout-item//...

Если я удаляю группировку ((до первого интервала и) в конце xpath) и добавьте эту часть xpath после каждого | xpath может быть оценен как XpathFinder, так и Selenium.

Неправильно ли моя группировка, и браузер просто случайно может это оценить или глючит Selenium при оценке xpaths?

Итак, суммировать это просто :

Если я попытаюсь оценить следующее

//div//(a|b)

, оценка не удалась с данной ошибкой. Группировка выполнена неправильно или я что-то упустил?

РЕДАКТИРОВАТЬ:

После того, как ChromeDriver для v79 соответствовал версиям, появилась та же ошибка:

invalid selector: Unable to locate an element with the xpath expression 

(//div[contains(@class,'windowViewMode-normal')]//div[@class='slds- 
tabs_default' and not(ancestor::*[contains(@class,'sidebar')])]//force-record- 
layout-item)//(span[not(contains(@class,'assistive') or @class='slds-checkbox' 
or contains(@class,'slds-button') or contains(@class,'test-id__field-value') or 
contains(@class,'flex-wrap') or contains(@class,'avatar'))]|a|emailui- 
formatted-email-wrapper//div[not(*)]|lightning-formatted-text|lightning- 
formatted-number[text()]|lightning-formatted-name|lightning-formatted- 
phone[not(*)]|lightning-formatted-address[not(*)]) 

because of the following error:

SyntaxError: Failed to execute 'evaluate' on 'Document': The string  

'(//div[contains(@class,'windowViewMode-normal')]//div[@class='slds- 
tabs_default' and not(ancestor::*[contains(@class,'sidebar')])]//force-record- 
layout-item)//(span[not(contains(@class,'assistive') or @class='slds-checkbox' 
or contains(@class,'slds-button') or contains(@class,'test-id__field-value') or 
contains(@class,'flex-wrap') or contains(@class,'avatar'))]|a|emailui- 
formatted-email-wrapper//div[not(*)]|lightning-formatted-text|lightning- 
formatted-number[text()]|lightning-formatted-name|lightning-formatted- 
phone[not(*)]|lightning-formatted-address[not(*)])' is not a valid XPath 
expression.
(Session info: chrome=79.0.3945.117)

1 Ответ

0 голосов
/ 14 января 2020

Это сообщение об ошибке ...

invalid selector: Unable to locate an element with the xpath expression 

//div[contains(@class,'windowViewMode-normal')]...lightning-formatted-address[not(*)])' 
is not a valid XPath expression.
(Session info: chrome=79.0.3945.117)
(Driver info: chromedriver=2.41.578737 (49da6702b16031c40d63e5618de03a32ff6c197e),
platform=Windows NT 10.0.17763 x86_64) (WARNING: The server did not provide any stacktrace information)

... означает, что ChromeDriver не смог найти элемент из-за неверного селектора .


Если вы наблюдаете промежуточный тег <span> внутри используемого вами , возможно, имеется дополнительная пара одиночных кавычек, которая вызывает InvalidSelectorException :

//(span[not(contains(@class,'assistive') or @class='slds-checkbox' or contains(@class,'slds-button') or contains(@class,'test-id__field-value') or contains(@class,'flex-wrap') or contains(@class,'avatar'))]                                                                                  
  ^starting here 

Устранение этой проблемы решит проблему недействительный селектор


Однако вашей большой проблемой является несовместимость между версиями двоичные файлы, которые вы используете следующим образом:

  • Вы используете chromedriver = 2,41
  • Примечания к выпуску chromedriver = 2,41 четко упоминает следующее:

Поддержка Chrome v67-69

  • Вы используете Chrome = 79,0
  • Примечания к выпуску ChromeDriver v79.0 четко упоминает следующее:

Поддержка Chrome версия 79

  • Ваш Selenium Client версия неизвестна нам.

Таким образом, существует явное несоответствие между ChromeDriver v2.41 и Chrome Browser v79.0


Решение

Убедитесь, что:

  • Selenium обновлено до текущих уровней Версия 3.141.59 .
  • ChromeDriver обновлен до текущего ChromeDriver v79.0.3945.36 уровня.
  • Chrome обновлен до текущего Chrome Версия 79.0 уровень. (согласно примечаниям к выпуску ChromeDriver v79.0 )
  • Очистить ваше Рабочее пространство проекта через IDE и Перестройте ваш проект только с необходимыми зависимостями.
  • ( только для WindowsOS ) Используйте CCleaner , чтобы стереть все рутинные операции ОС. до и после выполнения Test Suite .
  • ( только для LinuxOS ) Освободить и освободить неиспользуемую / кэшированную память в Ubuntu / Linux Монетный двор до и после выполнения Test Suite .
  • Если ваша базовая Веб-клиент версия слишком старая, то удалите ее через Revo Uninstaller и установите последнюю версию GA и выпущенную версию Веб-клиент .
  • Возьмите Перезагрузка системы .
  • Выполните @Test как не-root пользователь.
  • Всегда вызывайте driver.quit() в tearDown(){} метод для закрытия и уничтожения WebDriver и Веб-клиент экземпляров изящно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...