InvalidArgumentException: недопустимый аргумент и InvalidSelectorException: недопустимая ошибка селектора с ChromeDriver и Chrome с использованием Selenium с Java

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

Код:

public class DirectoryAutomation {

    public static void main(String[] args) throws IOException, InterruptedException {

        System.setProperty("webdriver.chrome.driver", "C:\\Users\\MartinErlic\\eclipse-workspace\\DirectoryAutomation\\libs\\chromedriver.exe");
        ChromeDriver driver = new ChromeDriver();
        driver.get("https://www.arivify.com/property/az/mesa");
        Thread.sleep(2000);
        driver.findElement(By.xpath("xpath=//div[@id='__layout']/div/div[2]/section/div/table/tbody/tr/td")).click();
    }
}

Исключение:

Starting ChromeDriver 78.0.3904.105 (60e2d8774a8151efa6a00b1f358371b1e0e07ee2-refs/branch-heads/3904@{#877}) on port 21763
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
[1579544613.399][WARNING]: This version of ChromeDriver has not been tested with Chrome version 79.
[1579544615.411][WARNING]: Timed out connecting to Chrome, retrying...
Jan. 20, 2020 10:23:37 A.M. org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Exception in thread "main" org.openqa.selenium.InvalidArgumentException: invalid argument
  (Session info: chrome=79.0.3945.130)
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-AS2OG7F', ip: '217.157.87.231', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '13.0.1'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 79.0.3945.130, chrome: {chromedriverVersion: 78.0.3904.105 (60e2d8774a81..., userDataDir: C:\Users\MARTIN~1\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:60322}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: 613ee3b0588734b777f2ceb5d7715c9c
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebDriver.get(RemoteWebDriver.java:277)
    at DirectoryAutomation.main(DirectoryAutomation.java:42)

Обновленное исключение:

Starting ChromeDriver 79.0.3945.36 (3582db32b33893869b8c1339e8f4d9ed1816f143-refs/branch-heads/3945@{#614}) on port 24206
Only local connections are allowed.
Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.
[1579548408.283][WARNING]: Timed out connecting to Chrome, retrying...
Jan. 20, 2020 11:26:50 A.M. org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Exception in thread "main" org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression xpath=//a[contains(@href,'/property/search/hEC4ocSW0')] because of the following error:
TypeError: Failed to execute 'evaluate' on 'Document': The result is not a node set, and therefore cannot be converted to the desired type.
  (Session info: chrome=79.0.3945.130)
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: 'DESKTOP-AS2OG7F', ip: '192.168.1.75', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '13.0.1'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 79.0.3945.130, chrome: {chromedriverVersion: 79.0.3945.36 (3582db32b3389..., userDataDir: C:\Users\MARTIN~1\AppData\L...}, goog:chromeOptions: {debuggerAddress: localhost:51045}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: c52709d658575c36b6705f1db4ce20b2
*** Element info: {Using=xpath, value=xpath=//a[contains(@href,'/property/search/hEC4ocSW0')]}
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:187)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:122)
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:323)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:428)
    at org.openqa.selenium.By$ByXPath.findElement(By.java:353)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315)
    at DirectoryAutomation.main(DirectoryAutomation.java:42)

person Martin Erlic    schedule 20.01.2020    source источник
comment
Не могли бы вы поделиться минимальным примером вашего кода, который создает это исключение?   -  person Julian    schedule 20.01.2020
comment
@Julian Я обновил свой пост, указав точный код, который я использую.   -  person Martin Erlic    schedule 20.01.2020
comment
просто обратите внимание, что thread.sleep там не нужен. Selenium будет ждать состояния готовности страницы... похоже, у вас неверный селектор. Опубликованное вами исключение включает xpath=, который не должен быть частью селектора.   -  person pcalkins    schedule 20.01.2020
comment
Спасибо! Это оно. Я лениво копировал/вставлял из Selenium IDE, которая излишне добавляла css к селектору: css=tr:nth-child(2) a. Это должно было быть просто tr:nth-child(2) a. То же самое касается xpath. Нужно удалить xpath=. Очень нужная проверка на вменяемость! Спасибо.   -  person Martin Erlic    schedule 20.01.2020


Ответы (2)


Первое предупреждение...

[WARNING]: This version of ChromeDriver has not been tested with Chrome version 79

...было связано с несовместимостью между версиями двоичных файлов, поскольку вы пытались инициировать/создать новый контекст просмотра, то есть сеанс браузера Chrome из:

  • chrome=79.0.3945.130 через
  • chromedriverVersion: 78.0.3904.105

Похоже, вы решили проблему, обновив Chrome и ChromeDriver до одинаковых уровней.

Вы можете найти подробное обсуждение в Эта версия ChromeDriver не тестировалась с ошибкой Chrome версии 79 при выполнении тестов protractorE2E с ChromeDriver Chrome Selenium


Второе сообщение об ошибке...

Exception in thread "main" org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression xpath=//a[contains(@href,'/property/search/hEC4ocSW0')] because of the following error:
TypeError: Failed to execute 'evaluate' on 'Document': The result is not a node set, and therefore cannot be converted to the desired type.

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

Из ваших попыток кода совершенно очевидно, что 55919967#55919967">xpath в:

driver.findElement(By.xpath("xpath=//div[@id='__layout']/div/div[2]/section/div/table/tbody/tr/td")).click();

имеет неправильный формат.


Решение

В соответствии с рекомендациями идеальное выражение xpath должны были быть:

driver.findElement(By.xpath("//div[@id='__layout']/div/div[2]/section/div/table/tbody/tr/td")).click();

Вы можете найти подробное обсуждение в InvalidSelectorError: недопустимый селектор: невозможно найти элемент с выражением xpath

person DebanjanB    schedule 20.01.2020

Это происходит, если вы пробуете другие веб-сайты, используя тот же код (в частности, используя ту же версию веб-драйвера и версию Chrome)?

Увидев это [1579544613.399][WARNING]: This version of ChromeDriver has not been tested with Chrome version 79.. Сообщает мне, что вы, вероятно, используете несовместимые версии драйвера.exe и chrome.

Увидев, что вы используете chrome версии 79, вы должны получить версию chromedriver, которая соответствует ей https://chromedriver.chromium.org/downloads, то есть 79.0.3945.36. Вы используете 78.0.3904.105 в настоящее время.

Несмотря на то, что бросок происходит в методе get(url), из-за чего может показаться, что веб-сайт способствует этой ошибке, я считаю, что это совпадение и что проблема возникнет при первой инструкции браузеру, независимо от того, какой тип это .

Редактировать. Это похоже на новую проблему. Убедитесь, что ваш xpath указывает на действительный элемент и что страница полностью загружается. Для тестирования я предлагаю попробовать найти более простой xpath к постоянной части страницы рядом с корневым элементом, чтобы убедиться, что поиск работает в целом. Однако это исключение предполагает, что вы все настроили и вам нужно начать настройку сайта, чтобы синхронизация и определение местоположения работали.

person Julian    schedule 20.01.2020
comment
Привет, я надеялся, что это так... К сожалению, я обновил свой ChromeDriver по предоставленной вами ссылке, и хотя предупреждение исчезло, та же ошибка сохраняется. Я пытался использовать тот же код на других сайтах, но все равно получаю ту же ошибку. - person Martin Erlic; 20.01.2020
comment
Не могли бы вы отредактировать свой вопрос, чтобы включить текущий вывод журнала внизу для сравнения на случай, если там скрывается обновленная подсказка? - person Julian; 20.01.2020
comment
@MartinErlic Я также вижу, что есть chromedriver версии 80. Вы должны убедиться, что у вас нет доступного обновления Chrome. Если вы используете старую версию, то иногда в следующем крупном обновлении могут остаться ошибки. - person Julian; 20.01.2020
comment
Эй, я обновил свой вопрос с новым исключением. Chrome 80 официально еще не выпущен, так что это может быть ранний выпуск. Исключение на самом деле кажется теперь другим... Exception in thread "main" org.openqa.selenium.InvalidSelectorException. Но я пытаюсь выбрать элементы по всей странице, и ни один из них не отвечает. - person Martin Erlic; 20.01.2020
comment
@MartinErlic Я обновил свой ответ, но, похоже, вы тоже это заметили. Я думаю, что ваша проблема с браузером исправлена, и вы находитесь на территории настройки своего кода. Я не уверен, насколько вы опытны с селеном, поэтому простите меня, если я педантичен. webdriver движется быстро, очень быстро. Он пытается и иногда работает довольно хорошо из коробки, но часто селен не будет ждать загрузки страниц, а все части дома должны быть отрисованы перед выполнением действий, вот где вступает ваша настройка, чтобы замедлить его и дать это правильные вещи, чтобы ждать, чтобы быть надежным - person Julian; 20.01.2020
comment
Я относительно опытен с Selenium. Тем не менее, я думаю, что это выходит за рамки проблемы настройки. Я экспериментировал с более длительным временем загрузки. Этот сайт, кажется, не позволяет мне взаимодействовать ни с чем, даже с логотипом в верхнем левом углу... - person Martin Erlic; 20.01.2020
comment
Понятно, повторяется ли это новое поведение и на других сайтах? Или это связано с тем, с которым вы пытаетесь работать? - person Julian; 20.01.2020
comment
Такое поведение происходит на других сайтах, в том числе на сайтах, которые я успешно тестировал ранее... Например, ccab.com/main/ccab_member. - person Martin Erlic; 20.01.2020
comment
Давайте продолжим обсуждение в чате. - person Martin Erlic; 20.01.2020