2016-11-15 5 views
1

Я пытаюсь автоматизировать повторяющуюся задачу заполнения формы с использованием HTA. Я делаю веб-страницу в IFrame. самая первая страница - это страница входа. Я НЕОБХОДИМО легко получить доступ к элементам имени пользователя и пароля этой страницы (отображается в IFrame) и, следовательно, иметь возможность автологинировать, нажав кнопку в HTA. Но теперь следующая страница содержит текстовое поле, которое мне нужно заполнить, а затем снова нажмите кнопку. Теперь у меня есть кнопка в HTA. Когда я нажимаю эту кнопку, я хочу, чтобы текстовое поле заполняло значение, которое я предоставил. Но вместо этого я получаю эту ошибку, Невозможно установить свойство «значение» нулевой ссылки. При отображении этого объекта с помощью предупреждения отображается «null». Я не понимаю, почему я могу ссылаться на элементы на странице входа и почему не на внутренних страницах.Объект IFrame, возвращающий null, если ссылается на HTA, содержащий IFrame

Ниже мой код:

<html> 
<head> 
<HTA:APPLICATION 
    APPLICATIONNAME="HTA" 
    SYSMENU="YES" 
    NAVIGABLE="YES" 
> 
    <meta http-equiv="x-ua-compatible" content="ie=11"> 
    <title>HTA</title> 

<script type="text/javascript"> 
    window.resizeTo(700,700); 
</script> 

<script type="text/javascript" > 

function Start() { 
var iframePage = document.getElementById("iframeid").contentDocument; 
var userId = iframePage.getElementById("userid"); 
var passwd = iframePage.getElementById("pwd"); 
var form = iframePage.getElementById("login"); 
userId.value='uu'; 
passwd.value='pp'; 
form.submit(); 
} 

function Show() { 
    document.getElementById("iframe").style.display = "block"; 
} 

function FillRncntl() { 
var iframePages = document.getElementById("iframeid").contentDocument;; 
var runcntl = iframePages.getElementById("PRCSMULTI"); 
runcntl.value='test'; 
} 

</script> 

</head> 
<body> 
     <form class="form" name="form"> 

       <input class="links" type="button" value="Show PIA" onclick="Show();" /> 
       <input class="links" type="button" value="Login" onclick="Start();" /> 
       <input class="links" type="button" value="Enter Runcontrol" onclick="FillRncntl();" /> 
     </form> 
     <br> 
     <div class="iframe" id="iframe" style="display:none"> 
     <iframe application="no" src="www.xyz.com" width="600" height="600" id="iframeid"> 
     </div> 

</body> 
</html> 

-Шоу кнопка PIA показывает страницу входа. Working Fine.

-Логинговая кнопка используется для входа в систему автоматически. Working Fine.

-Enter Кнопка Runcntl используется для заполнения текстового поля. NOT Working Fine.

Его не только с этим текстовым полем, у меня такие же проблемы с другими элементами с этой страницы.

PS: Его веб-сайт Peoplesoft Intranet.

ответ

2

Содержимое PeopleSoft содержится в самом iFrame, поэтому вам нужно захватить iCrame targetContent и выполнить поиск там элемента.

Начальная страница входа в PeopleSoft не отображается в iFrame.

Я изменил последний элемент ID, так что это будет работать на компоненте: PeopleTools-> Процесс Scheduler-> Система Process просит

function FillRncntl() { 
    var iframePages = document.getElementById("iframeid").contentDocument; 
    var targetContent = iframePages.getElementById("ptifrmtgtframe").contentDocument; 
    var runcntl = targetContent.getElementById("PRCSRUNCNTL_RUN_CNTL_ID"); 
    runcntl.value='test'; 
} 
+0

Thats большой @ Darryls99, он работал прекрасно. Я не знал о том, что Peoplesoft сам по себе содержится в IFrame. Тем не менее, мне нужно знать одно, о iframe, «ptifrmtgtframe», это genric iFrame, используемый всеми страницами? или разные страницы отображаются в разных фреймах? Где я могу получить эту информацию. Спасибо :-) –

+1

Короткий ответ да, что iframe используется последовательно в PeopleSoft AFAIK. Длинный ответ. Изменяя URL-адрес и на основе типа содержимого, iframe может присутствовать или не присутствовать. В URL-адресе обратите внимание на имя сервера, если вы измените его с psp на psc, вы получите только содержимое внутри iframe. (без навигации). Также существуют другие типы содержимого PeopleSoft, которые могут быть или не быть в пределах iframe (weblibcs, домашние страницы, навигация и т. Д.). Если найдено имя iFrame, используя инструменты разработчика, встроенные в браузер, чтобы просмотреть страницу. – Darryls99

+0

Спасибо @ Darryls99. Но как насчет страниц, которые отображаются как плавающие страницы, например, в случае страницы Process Schedular Request, где мы выбираем процессы и сервер для запуска. Это также IFrame? как передать его элементы. Извиняюсь, если я ношу, может поднять новый вопрос, если потребуется. :-) –

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