Данное выражение xpath "// div [содержит (@ class = 'loader-overlay')]" недопустимо в Selenium - PullRequest
0 голосов
/ 16 января 2019

После обновления с версии 2.53 до версии 3.14 Selenium сообщает

Given xpath expression "//div[contains(@class='loader-overlay')]" is invalid

Этот код

System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver/v0.23.0");
FirefoxOptions options = new FirefoxOptions();
//...
driver = new FirefoxDriver(options);
WebElement loaderElement = driver.findElement(By.xpath("//div[contains(@class='loader-overlay')]"));

выдает эту ошибку

org.openqa.selenium.InvalidSelectorException: Given xpath expression "//div[contains(@class='loader-overlay')]" is invalid: [Exception... "<no message>"  nsresult: "0x8060000d (<unknown>)"  location: "JS frame :: chrome://marionette/content/element.js :: element.findByXPath :: line 401"  data: no]
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08-02T20:19:58.91Z'
System info: host: 'xxx', ip: '10.233.112.79', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-116-generic', java.version: '1.8.0_181'
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 64.0, javascriptEnabled: true, moz:accessibilityChecks: false, moz:geckodriverVersion: 0.23.0, moz:headless: false, moz:processID: 2736, moz:profile: /tmp/rust_mozprofile.OP8KKQ..., moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: LINUX, platformName: LINUX, platformVersion: 4.4.0-116-generic, rotatable: false, setWindowRect: true, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}

Ответы [ 2 ]

0 голосов
/ 16 января 2019

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

org.openqa.selenium.InvalidSelectorException: Given xpath expression "//div[contains(@class='loader-overlay')]" is invalid: [Exception... "<no message>"  nsresult: "0x8060000d (<unknown>)"  location: "JS frame :: chrome://marionette/content/element.js :: element.findByXPath :: line 401"  data: no]
For documentation on this error, please visit: http://seleniumhq.org/exceptions/invalid_selector_exception.html

... подразумевает, что выражение xpath не является допустимым.

Решение

Если элемент имеет один класс атрибут как loader-overlay, вам нужно изменить xpath как:

"//div[@class='loader-overlay']"

Если элемент имеет несколько атрибутов class и loader-overlay, это один из них, вам нужно изменить xpath как :

"//div[contains(@class, 'loader-overlay')]"
0 голосов
/ 16 января 2019

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

//div[contains(@class='loader-overlay')]

с

//div[contains(@class, 'loader-overlay')]

Обратите внимание, что вы должны использовать синтаксис [@attr = "value"], если хотите проверить, является ли значение атрибута точно "value", но синтаксис contains равен [contains(@attr, "value")]

...