Не удалось получить доступ к консоли элементов с помощью PhantomJS и Selenium

У меня есть следующий код, этот код работает с драйвером Chrome, но с фантомной библиотекой js 1.4.4 и драйвером 2.1.1 не работает, я не могу найти элементы

Эта проблема не возникает с драйвером Chrome.

Испытания кода:

public void test1()
{
    DesiredCapabilities caps = new DesiredCapabilities();
    ((DesiredCapabilities) caps).setJavascriptEnabled(true);
    ((DesiredCapabilities) caps).setCapability("takesScreenshot",true);
    ((DesiredCapabilities) caps).setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "/Users/santiagogalicia/downloads/phantomjs");
    caps.setJavascriptEnabled(true);
    String [] phantomJsArgs = {"--web-security=no", "--ignore-ssl-errors=yes"};
    caps.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, phantomJsArgs);
    WebDriver driver = new PhantomJSDriver(caps);
    Dimension dimension = new Dimension(400,600);
    driver.manage().window().setSize(dimension);
    driver.get("https://stage-commissionist.payclip.com/#/");
    WebDriverWait wait = new WebDriverWait(driver, 10);     
    wait.until(ExpectedConditions.elementToBeClickable(By.id("formUsername")));
    driver.findElement(By.id("formUsername")).sendKeys(User);
    driver.findElement(By.id("formPassword")).sendKeys(Password);
    driver.findElement(By.cssSelector(".btn")).click(); 
    driver.close();
}

Пробовал сменить драйвер, с другим драйвером работает

Ошибка, которую я вижу:

[ERROR - 2019-02-07T19:15:26.476Z] Session [b736bad0-2b0c-11e9-b0db-6d1517ea5006] - page.onError - msg: ReferenceError: Can't find variable: Set phantomjs://platform/console++.js:263 in error
[ERROR - 2019-02-07T19:15:26.476Z] Session [b736bad0-2b0c-11e9-b0db-6d1517ea5006] - page.onError - stack:
  (anonymous function) (https://stage-commissionist.payclip.com/static/js/1.ea7f0607.chunk.js:1)
  f (https://stage-commissionist.payclip.com/#/:1)
  phantomjs://platform/console++.js:263 in error
[ERROR - 2019-02-07T19:15:26.759Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1549566926721

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

JeffC 07.02.2019 18:43

@JeffC извините, я редактирую проблему

Santiago Galicia 07.02.2019 18:50

Убедитесь, что сообщение об ошибке завершено. Похоже, что это недостающие части. В какой строке эта ошибка? Похоже, вы разместили два несвязанных сообщения об ошибках... одно связано с Can't find variable: Set, а другое связано с тайм-аутом ожидания, когда элемент станет доступным для клика.

JeffC 07.02.2019 19:08

Я не могу зайти на указанный сайт. Вы уверены, что локатор (id='formUsername') подходит? Сайт загружается очень медленно? Может 10 секунд мало?

JeffC 07.02.2019 19:10

@JeffC я установил время на 20 секунд, но проблема остается, локатор в порядке, он работает с chromedriver

Santiago Galicia 07.02.2019 20:18

@JeffC сайт доступен только через vpn, это частный сайт.

Santiago Galicia 07.02.2019 20:47

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

JeffC 07.02.2019 20:47

это элемент <input aria-invalid = "false" class = "jss283 jss268" id = "formUsername" name = "username" placeholder = "Username" type = "text" value = "santiago.galicia"> и теперь я измените условие ожидания на wait.until(ExpectedConditions.visibilityOfElementLocated(By.‌​id("formUsername")))‌​;

Santiago Galicia 07.02.2019 23:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
8
571
1

Ответы 1

Как вы упомянули этот код работает с драйвером chrome, но с библиотекой phantom js 1.4.4 и 2.1.1 это сообщение об ошибке...

[ERROR - 2019-02-07T19:15:26.476Z] Session [b736bad0-2b0c-11e9-b0db-6d1517ea5006] - page.onError - msg: ReferenceError: Can't find variable: Set phantomjs://platform/console++.js:263 in error
[ERROR - 2019-02-07T19:15:26.476Z] Session [b736bad0-2b0c-11e9-b0db-6d1517ea5006] - page.onError - stack: (anonymous function) (https://stage-commissionist.payclip.com/static/js/1.ea7f0607.chunk.js:1) f (https://stage-commissionist.payclip.com/#/:1)
phantomjs://platform/console++.js:263 in error [ERROR - 2019-02-07T19:15:26.759Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1549566926721

... подразумевает, что PhantomJSDriver не был инициирован должным образом.

Согласно обсуждению в ReferenceError: не удается найти переменную: установить, основная причина заключается в том, что одна из предыдущих версий ФантомJS не поддерживала Set ES2015.

Решение

Вы можете попробовать экспериментальную ветку uncss, которая использует jsdom вместо PhantomJS, установив вместо нее uncss-jsdom. Вы можете найти слияние в #265: Замените PhantomJS на jsdom. Здесь вы можете найти обсуждение Рассмотрим jsdom

Однако с Селен v3.14.0 и фантомный драйвер-1.4.4.jar ваш блок кода идеально инициализирует PhantomJSDriver и Призрачный браузер, и вы можете использовать следующее решение:

  • Блок кода:

    package phantomJSDriver;
    
    import org.openqa.selenium.Dimension;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.phantomjs.PhantomJSDriver;
    import org.openqa.selenium.phantomjs.PhantomJSDriverService;
    import org.openqa.selenium.remote.DesiredCapabilities;
    
    public class A_PhantomJS_DCap {
    
        public static void main(String[] args) {
    
            DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
            desiredCapabilities.setJavascriptEnabled(true);
            desiredCapabilities.setCapability("takesScreenshot", true);
            desiredCapabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
            String [] phantomJsArgs = {"--web-security=no", "--ignore-ssl-errors=yes"};
            desiredCapabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, phantomJsArgs);
            WebDriver driver = new PhantomJSDriver(desiredCapabilities);
            Dimension dimension = new Dimension(400,600);
            driver.manage().window().setSize(dimension);
            driver.get("https://www.google.co.in");
            System.out.println(driver.getTitle());
            driver.quit();
        }
    }
    
  • Выход консоли:

    Feb 09, 2019 8:35:12 PM org.openqa.selenium.phantomjs.PhantomJSDriverService <init>
    INFO: executable: C:\Utility\phantomjs-2.1.1-windows\bin\phantomjs.exe
    Feb 09, 2019 8:35:12 PM org.openqa.selenium.phantomjs.PhantomJSDriverService <init>
    INFO: port: 18249
    Feb 09, 2019 8:35:12 PM org.openqa.selenium.phantomjs.PhantomJSDriverService <init>
    INFO: arguments: [--web-security=no, --ignore-ssl-errors=yes, --webdriver=18249, --webdriver-logfile=C:\Users\AtechM_03\LearnAutmation\learn-automation\phantomjsdriver.log]
    Feb 09, 2019 8:35:12 PM org.openqa.selenium.phantomjs.PhantomJSDriverService <init>
    INFO: environment: {}
    [INFO  - 2019-02-09T15:05:14.986Z] GhostDriver - Main - running on port 18249
    [INFO  - 2019-02-09T15:05:16.008Z] Session [1b791e00-2c7c-11e9-9e77-ef7d90721101] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1","webSecurityEnabled":false}
    [INFO  - 2019-02-09T15:05:16.008Z] Session [1b791e00-2c7c-11e9-9e77-ef7d90721101] - page.customHeaders:  - {}
    [INFO  - 2019-02-09T15:05:16.008Z] Session [1b791e00-2c7c-11e9-9e77-ef7d90721101] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"2.1.1","driverName":"ghostdriver","driverVersion":"1.2.0","platform":"windows-8-32bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}}
    [INFO  - 2019-02-09T15:05:16.008Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: 1b791e00-2c7c-11e9-9e77-ef7d90721101
    Feb 09, 2019 8:35:16 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: OSS
    Google
    [INFO  - 2019-02-09T15:05:20.866Z] ShutdownReqHand - _handle - About to shutdown
    

Note: As per your comment the site is only available by vpn, its a private site so the relevant code was tested with https://www.google.co.in

привет @DebanjanB, ты знаешь, как мне настроить jsdom для моего проекта eclipse, я пытаюсь использовать код, который ты вставил, но этот код отлично работает с phantomJS и eclipse.

Santiago Galicia 11.02.2019 17:41

@SantiagoGalicia Мы не так много работали с jsdom, но я предоставил всю необходимую документацию в своем ответе, касающемся jsdom.

undetected Selenium 11.02.2019 18:28

@SantiagoGalicia Рад, что смог вам помочь. Пожалуйста, Принимать вместо отвечать, нажав на пустую галочку рядом с моей отвечать, которая находится чуть ниже стрелки голосование против, чтобы галочка превратилась в зеленый.

undetected Selenium 11.02.2019 18:29

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