Klitgaard Klitgaard - 1 month ago 14
Javascript Question

VBA - Handle Javascript pop up with IE automation

I have automated my Internet Explorer to fill out a lot of information throughout the webform. When my VBA script clicks the transfer htmlelement it runs the Javascript which opens a new msgbox where I need to click "ok" or "Cancel". I want my script to click "ok" to this. This stops code untill any further action is made to the popup window created by the javascript, hence Sendkeys will not work. The below element is from the HTML of the webpage which i am trying to interact with:

<input type="image" name="ctl00$PlaceHolderMain$TestControl$
CertificateSearchControl$cmdTransfer"
id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_cmdTransfer"
class="kantele-small-icon" src="../../_layouts/Images/Empty.gif"
alt="Transfer"
onclick="return confirmOnTransfer();WebForm_DoPostBackWithOptions(new
WebForm_PostBackOptions(&quot;ctl00$PlaceHolderMain$TestControl1
$CertificateSearchControl$cmdTransfer&quot;, &quot;&quot;, true,
&quot;Transfer&quot;, &quot;&quot;, false, false))"
style="border-width:0px;" />


I use the following command to call the Transfer button:

Set HTMLDoc = ie.document
HTMLDoc.all.Item("ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_cmdTransfer").Click


Can anyone help me find a solution to this issue?

A similar question has been answered in another post, but I cant seem to get the solution to work in my script.

Handle Pop-Up While Navigating with IE

All help will be greately appriciated.

Update 08032015:

function confirmOnTransfer() {

if (typeof (Page_ClientValidate) == "function" && Page_ClientValidate()) {

var volume = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtCertificateCount').value.trim();
var oDDL = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferDomain');
var oDDL2 = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferActor');
var oDDL3 = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferAccount');
var checkbox = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_chkAcc');
var selectedVolume = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_hdnFinalVolume').value.trim();

//Issue 3982: 1496 - Error: Agreement date is after transaction date
var contractDateDefaultValue = 0;
if (document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtContractDate') != null) {

var currentDate = new Date();
var currmonth;
var currDate;

// in java script the month is saved to array in array starts to zero so the if getmonth() means we canot retrieve current month so we should add +1
var currmonth = currentDate.getMonth() + 1;
//In our application the date should be "2013-06-20" so here the month or date length is less than two means we should add '0' to bfore the date or month
if (currmonth.toString().length < 2)
currmonth = '0' + currmonth;

var currDate = currentDate.getDate();
if (currentDate.getDate().toString().length < 2)
currDate = '0' + currDate;

var currentDateText = currentDate.getFullYear() + '-' + currmonth + '-' + currDate;

var currentDateArr = currentDateText.toString().split('-');

var ContactDateArr = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtContractDate').value.toString().split('-');

if (ContactDateArr[0] > currentDateArr[0]
|| (ContactDateArr[0] == currentDateArr[0] && currentDateArr[1] == ContactDateArr[1] && currentDateArr[2] < ContactDateArr[2])
|| (ContactDateArr[0] == currentDateArr[0] && currentDateArr[1] < ContactDateArr[1])) {
alert(document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_hdnContractDateValidation').value)
//if the alert received means we should assign this value based on this value we control to next condition to confirmation of transfer alert
contractDateDefaultValue = 1;
return false;
}


Update 01042015 (NOT an aprils fools joke)

<td height="28px"><input name="ctl00$PlaceHolderMain$TestControl1$CertificateSearchControl$CertificateBundleReport$ctl05$ctl03$ctl00" type="text" maxlength="255" size="10" id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl00" disabled="disabled" title="Find Text" style="font-family:Verdana;font-size:8pt;" /></td><td width="4px"></td><td height="28px"><a id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl01" title="Find" href="#" style="font-family:Verdana;font-size:8pt;color:Gray;text-decoration:none;white-space:nowrap;">Find</a></td><td width="4px"></td><td height="28px"><span style="font-family:Verdana;font-size:8pt;">|</span></td><td width="4px"></td><td height="28px"><a id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl03" title="Find Next" href="#" style="font-family:Verdana;font-size:8pt;color:Gray;text-decoration:none;white-space:nowrap;">Next</a></td>
</tr>
</table>
</div><table cellpadding="0" cellspacing="0" ToolbarSpacer="true" style="display:inline-block;width:20px;">
<tr>
<td></td>
</tr>
</table><div class=" " style="display:inline-block;font-family:Verdana;font-size:8pt;vertical-align:top;">
<table cellpadding="0" cellspacing="0" style="display:inline;">
<tr>
<td height="28px"><div id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00" style="font-family:Verdana;font-size:8pt;border:1px transparent Solid;">
<table id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Button" title="Export" border="0">
<tr>
<td><a id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonLink" title="Export" alt="Export" href="javascript:void(0)" style="text-decoration:none;"><img id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonImg" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&amp;Version=11.0.3010.3&amp;Name=Microsoft.Reporting.WebForms.Icons.ExportDisabled.gif" alt="Export" style="border-style:None;height:16px;width:16px;border-width:0px;" /><span style="width:5px;text-decoration:none;"> </span><img id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonImgDown" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&amp;Version=11.0.3010.3&amp;Name=Microsoft.Reporting.WebForms.Icons.ArrowDownDisabled.gif" alt="Export" style="border-style:None;height:6px;width:7px;border-width:0px;margin-bottom:5px;" /></a></td>
</tr>
</table>
</div><div id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Menu" style="background-color:#ECE9D8;border:1px #336699 Solid;display:none;position:absolute;padding:1px;z-index:1;">
<div style="border:1px transparent Solid;">
<a title="Excel" alt="Excel" onclick="$find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport').exportReport('EXCELOPENXML');" href="javascript:void(0)" style="color:#3366CC;font-family:Verdana;font-size:8pt;padding:3px 8px 3px 8px;display:block;white-space:nowrap;text-decoration:none;">Excel</a>
</div><div style="border:1px transparent Solid;">
<a title="PDF" alt="PDF" onclick="$find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport').exportReport('PDF');" href="javascript:void(0)" style="color:#3366CC;font-family:Verdana;font-size:8pt;padding:3px 8px 3px 8px;display:block;white-space:nowrap;text-decoration:none;">PDF</a>
</div><div style="border:1px transparent Solid;">
<a title="Word" alt="Word" onclick="$find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport').exportReport('WORDOPENXML');" href="javascript:void(0)" style="color:#3366CC;font-family:Verdana;font-size:8pt;padding:3px 8px 3px 8px;display:block;white-space:nowrap;text-decoration:none;">Word</a>
</div>
</div></td>
</tr>
</table>


I interact with the ID
"ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Button"
to get the menu to drop down, but selecting either "Export to PDF" or "Export to Excel" are challenging me a bit. Any suggestion to solves this would be greately appreciated.

Answer

You can try something like this:

  Dim el, f

  Set HTMLDoc = ie.document
  Set el =HTMLDoc.getElementById("ctl00_PlaceHolderMain_TestControl1_" & _ 
                                 "CertificateSearchControl_cmdTransfer")

  f = el.onclick

  f = Replace(f, "return confirmOnTransfer();", "")

  el.onclick = f

  el.click

Part 2 (4/1/2015):

  Dim el2
  'get the div containing the menu options
  Set el2 = HTMLDoc.getElementById( _
                "ctl00_PlaceHolderMain_TestControl1_Certificate" & _
               "SearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Menu")

  'click one of the contained links in that div
  el2.getElementsByTagName("a")(1)