java .base / java .lang.reflect.Constructor.newInstance (Constructor. java: 481) при использовании неправильного кода с Selenium и Java - PullRequest
1 голос
/ 17 июня 2020

Для быстрого прототипирования я использовал приведенный ниже код Selenium Webdriver java (на самом деле, он не соответствует лучшим практикам, но он все равно должен работать, несмотря на то, что он неоптимален).

if (!driver.findElements(By.xpath("//div[@class='ui-lib-popup-element__close']")).isEmpty()) {
    driver.findElement(By.xpath("//div[@class='ui-lib-popup-element__close']")).click();
}

Т.е. он имеет такое же значение в findElement(). Когда он помещается в while l oop, он выбрасывает некоторые l oop исключения.

Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 77.0.1, javascriptEnabled: true, moz:accessibilityChecks: false, moz:buildID: 20200602222727, moz:geckodriverVersion: 0.26.0, moz:headless: false, moz:processID: 12120, moz:profile: C:\Users\eljah32\AppData\Lo..., moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, platformVersion: 10.0, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: 77ad55a3-7cc3-4126-a91d-f0b63c438520
    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.RemoteWebElement.execute(RemoteWebElement.java:285)
    at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:84)
    at SeleniumConfirmRNN.main(SeleniumConfirmRNN.java:122)

Версии библиотек Selenium:

<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-firefox-driver -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-firefox-driver</artifactId>
            <version>3.141.59</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-support</artifactId>
            <version>3.0.1</version>
        </dependency>

Итак, что делать с этой проблемой и это ошибка? Это происходит для FirefoxDriver.

1 Ответ

1 голос
/ 17 июня 2020

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

Capabilities {acceptInsecureCerts: true, browserName: firefox, browserVersion: 77.0.1, javascriptEnabled: true, moz:accessibilityChecks: false, moz:buildID: 20200602222727, moz:geckodriverVersion: 0.26.0, moz:headless: false, moz:processID: 12120, moz:profile: C:\Users\eljah32\AppData\Lo..., moz:shutdownTimeout: 60000, moz:useNonSpecCompliantPointerOrigin: false, moz:webdriverClick: true, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, platformVersion: 10.0, rotatable: false, setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify}
Session ID: 77ad55a3-7cc3-4126-a91d-f0b63c438520
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

... означает, что GeckoDriver не смог выполнить click() на WebElement в Контекст просмотра ie Firefox Браузер сеанс.


Есть несколько моментов, которые необходимо учитывать:

  • Прежде всего, вы не вызываете click() в элементе <div>, если этот элемент не содержит атрибут contenteditable="true".

Вы можете найти подробное обсуждение в Как изменить внутренний HTML контентного элемента

  • Предположительно, должен быть дочерний <input> или <span> element, который является вашим желаемым элементом в <div>, на который вы ссылаетесь. Поэтому вам нужно продвинуться на один шаг глубже, чтобы найти интерактивный элемент, вызывающий WebDriverWait для elementToBeClickable(), и вы можете использовать следующую стратегию локатора :

    try {
      new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='ui-lib-popup-element__close']//input"))).click();
      System.out.println("Element was clicked");
    }
    catch(TimeoutException e) {
      System.out.println("Element wasn't clicked");
    }
    

Ссылка

Соответствующее обсуждение можно найти в:

...