sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод) с использованием findElement (By.className ()) через Selenium и Java - PullRequest
0 голосов
/ 02 октября 2019

Когда я выполняю следующий код:

driver.findElement(By.className("qview-product-name")).click();

Я получаю следующую ошибку

Session ID: d5df6f837164b1738991e8dc09027fe0
*** Element info: {Using=class name, value=qview-product-name}
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    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.findElementByClassName(RemoteWebDriver.java:412)
    at org.openqa.selenium.By$ByClassName.findElement(By.java:389)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:315)
    at Logins.bcLogin(Logins.java:140)
    at Exception.main(Exception.java:54)

Веб-страница, над которой я работаю, определенно содержит следующий HTML-код, и я пытался ждатьсоответствующее количество времени для выполнения.

<dd class="qview-product-name">
    <span class="note">1 x </span>
                    <a href="Link_here"_blank">Title</a>
            </dd>

Я думал, что я довольно неплохо разбираюсь в поиске элементов, используя различные методы, но это поставило меня в тупик. Любые идеи о том, как я должен идти о поиске неисправностей? Спасибо!

1 Ответ

1 голос
/ 02 октября 2019

Вам необходимо позаботиться о нескольких вещах:

  • By.className("qview-product-name") относится к родительскому тегу <dd> и, возможно, это не тот элемент, который вы хотите щелкнуть. Скорее, ваш вариант использования должен заключаться в том, чтобы щелкнуть элемент <a href="Link_here"_blank">Title</a>.
  • В соответствии с рекомендациями, при вызове click() вам нужно заставить вас вызвать WebDriverWait дляelementToBeClickable() и вы можете использовать любую из следующих Стратегий локатора :

  • linkText:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.linkText("Title"))).click();
    
  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("dd.qview-product-name a[href='Link_here']"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//dd[@class='qview-product-name']//a[@href='Link_here' and text()='Title']"))).click();
    

Дополнительные замечания

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

  • JDK обновлен до текущих уровней JDK 8u222 .
  • Selenium обновлен до текущегоуровни Версия 3.141.59 .
  • ChromeDriver обновлен до текущего ChromeDriver v77.0 уровня.
  • Chrome обновлен до текущей версии Chrome 77.0 . (согласно примечаниям к выпуску ChromeDriver v77.0 )
  • Очистка вашего Рабочего пространства проекта через IDE и Перестройте ваш проект только с необходимыми зависимостями.
  • Если ваша базовая версия Web Client устарела, удалите ее и установите последнюю версию GA и выпущенную версию WebКлиент .
  • Возьмите Перезагрузку системы .
  • Выполните @Test как пользователь без полномочий root .
...