Ghostdriver 1.2.1 + PhantomJS 2.0 + последняя версия Selenium Не удается найти переменную ошибку в Java

[ERROR - 2016-01-16T02:22:00.898Z] Session [e6651a90-bbf7-11e5-9061-cff578894101] - page.onError - msg: ReferenceError: Can't find variable: data

  :262 in error
[ERROR - 2016-01-16T02:22:00.898Z] Session [e6651a90-bbf7-11e5-9061-cff578894101] - page.onError - stack:
  (anonymous function) (http://www.example.com/ns/common/jquery/jquery.cartActions.js?cd=0:205)
  o (http://www.example.com/images/common/jquery/jquery.latest.js:2)
  fireWith (http://www.example.com/images/common/jquery/jquery.latest.js:2)
  w (http://www.example.com/images/common/jquery/jquery.latest.js:4)
  d (http://www.example.com/images/common/jquery/jquery.latest.js:4)
  openUrl (:0)
  open (:280)
  (anonymous function) (:/ghostdriver/request_handlers/session_request_handler.js:495)
  _execFuncAndWaitForLoadDecorator (:/ghostdriver/session.js:212)
  _postUrlCommand (:/ghostdriver/request_handlers/session_request_handler.js:494)
  _handle (:/ghostdriver/request_handlers/session_request_handler.js:91)
  _reroute (:/ghostdriver/request_handlers/request_handler.js:61)
  _handle (:/ghostdriver/request_handlers/router_request_handler.js:78)

  :262 in error

^ Домен отредактирован специально.

Согласно переменной Cannot find - PhantomJS, эта ошибка связана с отсутствием надлежащего выполнения Javascript в тюрьме. Я не понимаю, что это значит в контексте моей программы на Java.

Моя программа Selenium имеет только один вид вызовов Javascript, и он работает так:

((JavascriptExecutor) driver).executeScript("arguments[0].click();", buttonToClick);

Вышеприведенная строка, похоже, не является проблемой, потому что из моих тестов я вижу, что несколько строк, подобных приведенным выше, выполняются без ошибок до появления вышеуказанной ошибки.

Кроме того, Session.NegotiatedCapabilities имеет "acceptSslCerts":false, который я не смог решить с помощью этого блока кода в качестве инициализатора драйвера PhantomJS:

String[] cli_args = new String[]{"--debug=false", "--web-security=false", "--ssl-protocol=any", "--ignore-ssl-errors=true"};
        DesiredCapabilities caps = DesiredCapabilities.phantomjs();
        caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cli_args);
        caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "/Users/richard/Downloads/phantomjs-2.0.0-macosx/bin/phantomjs");
        driver = new PhantomJSDriver(caps);

Я вижу, что аргументы передаются на консоли...

Jan 16, 2016 6:23:40 AM org.openqa.selenium.phantomjs.PhantomJSDriverService <init>
INFO: arguments: [--web-security=no, --ignore-ssl-errors=yes, --webdriver=33238, --webdriver-logfile=/Users/richard/YeezyBot/phantomjsdriver.log]

Наконец, все работает с Firefox WebDriver.

1 ответ

Внедрение JavaScript на веб-страницу или любой другой элемент - плохая практика. Вы можете найти элемент с помощью кода Selenium и щелкнуть по нему без использования каких-либо инъекций.

  1. Дождитесь загрузки страницы

  2. Найдите кнопку по выражению CSS или Xpath

  3. Подождите, пока элемент станет кликабельным

  4. щелкните по нему, используя только код Selenium

    WebDriverWait wait = новый WebDriverWait (драйвер, timeToWait);

    this.by = автор;

    пытаться {

    webElement lastFoundElement =wait.until(ExpectedConditions.visibilityOfElementLocated(by));

    wait.until(ExpectedConditions.elementToBeClickable(lastFoundElement));

    новые действия (браузер) .moveToElement (элемент, offsetX, offsetY).click (). build (). perform();

    }catch (Exception ex){
    }

Другие вопросы по тегам