2016-07-07 2 views
0

Перед выполнением javascript от драйвера PhantomJS я столкнулся со следующей проблемой:Облицовка некоторых проблем при выполнении javascript с помощью драйвера phantomJS с безмятежностью

(PhantomJSDriver) driver).executeScript("document.getElementsById('whereOut')") 

Ошибка:

{"errorMessage":"'undefined' is not a function (evaluating 'document.getElementsById('whereOut')')","request":{"headers":{"Accept-Encoding":"gzip,deflate","Connection":"Keep-Alive","Content-Length":"69","Content-Type":"application/json; charset=utf-8","Host":"localhost:33819","User-Agent":"Apache-HttpClient/4.3 (java 1.5)"},"httpVersion":"1.1","method":"POST","post":"{\"script\":\"document.getElementsById(\u0027whereOut\u0027)\",\"args\":[]}","url":"/execute","urlParsed":{"anchor":"","query":"","file":"execute","directory":"/","path":"/execute","relative":"/execute","port":"","host":"","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/execute","queryKey":{},"chunks":["execute"]},"urlOriginal":"/session/b0246730-4435-11e6-b64c-7bf1e13a7577/execute"}} Command duration or timeout: 278 milliseconds

также попытался следующий код:

((JavascriptExecutor) driver).executeScript("document.getElementById('whereOut')") 

выше код возвращает нулевое значение, даже если добавить возвращаемое значение, как показано ниже:

((JavascriptExecutor) driver).executeScript("return document.activeElement") 

Возвращает нулевое значение.

Кто-нибудь пытался изменить css конкретного элемента, используя фантомные js?

((JavascriptExecutor) driver).executeScript("document.getElementById('whereOut').className=''") 

То, что я понял, что при выполнении выше строк коды, я не получаю элемент, используя javascript выполнение в то время как тот же элемент извлекаемый с использованием чистого кода селена с браузером Firefox.

P.S. Я использую версию phantomJS 1.9.7 и безмятежность: 1.0.56.

+0

Но JavascriptExecutor не реализован Ph antomJSDriver, как это могло бы работать? –

ответ

0

Попробуйте использовать executeAsyncScript с callback, как показано ниже: -

String changedClassName = ((JavascriptExecutor) driver).executeAsyncScript("var callback = arguments[arguments.length - 1];var element = document.getElementById('whereOut');element.setAttribute('class', 'your new class name');callback(element.getAttribute('class'));"); 

Отредактировано: - Если вы хотите изменить className желания элемента, то попробуйте использовать .setAttribute ниже

WebElement element = driver.findElement(By.id("whereOut")); 
String changedClassName = ((JavascriptExecutor) driver).executeAsyncScript("var callback = arguments[arguments.length - 1];arguments[0].setAttribute('class', arguments[1]);callback(arguments[0].getAttribute('class'));", element, "your new class name"); 

Надеется, что это будет помогите вам ... :)

+0

Не работает, я получаю эту ошибку [[email protected] -> неизвестный локатор] –

+0

@BilboBaggins убедитесь, что сначала на консоли вашего браузера 'document.getElementById ('whereOut')' возвращает что-то или нет –

+0

если я делаю то же самое с использованием selenium WebElement element = driver.findElementBy (By.id («whereOut»)); или driver.findElementBy (By.cssClassName ("whereOut")); (метод для имени cssClass не может быть правильно назван), я получаю желаемый тег div, но я не могу удалить его css с помощью экземпляра WebElement для того, что я должен выполнить описанный выше (упомянутый в вопросе) java-скрипт, который не работает странно, потому что то же самое отлично работает с чистым кодом селена, но я должен использовать структуру Serenity BDD –

Смежные вопросы