объявить окно в селене с browsermob - PullRequest
1 голос
/ 18 августа 2010

Я использую browsermob и selenium для создания сценариев, запускаемых на сайте.Я пытаюсь захватить все элементы на странице с определенным именем.Моя проблема, когда я пытаюсь использовать window.document.getElementsByName("name"); browsermob говорит, что window не определено.Как вы определяете окно?

1 Ответ

3 голосов
/ 19 августа 2010

Вам нужно вызвать selenium.getEval (). Сигнатура этого вызова заключается в том, что он принимает строковый аргумент, который представляет собой JavaScript, который будет выполнен в браузере, и возвращает строку, которая является строковым представлением возвращенные результаты.

Последняя часть - строковое представление - важна. Хотя вы, конечно, не можете сделать это в вашем скрипте BrowserMob:

var elements = window.document.getElementsByName("name");

Вы также не можете сделать это:

var elements = selenium.getEval('return window.document.getElementsByName("name")');

Хотя второй пример ближе к тому, что вам нужно сделать, он не совсем сработает, потому что getElementsByName возвращает массив объектов DOM, которые преобразуются в строку. Вместо этого вам, скорее всего, нужно решить , что вы хотите сделать с этими элементами, и создать большой фрагмент JS для eval, который будет возвращать именно то, что вы хотите.

Например, это вернет атрибут href второй ссылки на странице:

var secondHref = selenium.getEval('return window.document.getElementsByName("a")[1].href');

Надеюсь, это поможет. Главное, что вам нужно понять, это то, что хотя скрипты BrowserMob могут быть написаны на JavaScript, эта среда JavaScript, в которой он работает, в браузере , а не . Чтобы оценить произвольный JavaScript в браузере, вы должны пройти через getEval (), создав тем самым ситуацию JavaScript-in-JavaScript, которая может немного запутать.

...