Unable to Invoke Inserted Javascript Fragment

谁说胖子不能爱 提交于 2020-08-19 05:38:05

问题


I am attempting to insert a Javascript fragment into a webpage and then invoke it using blue prism. The purpose of this is to analyse what elements are returned from a search to determine where to go next in the overall process flow.

I have tested the Javascript code on the intended website using the IE 11 developer console and it works without issue. The code is below in case it is useful.

function includes(stringToCheck, CharacterToSearchFor)
{
    var found = new Boolean();
    var splitString = stringToCheck.split("");

    for (var index = 0; index < splitString.length; index++) 
    {
        if(splitString[index] == CharacterToSearchFor)
        {
            return true;
        }
    }
    return false;
}

function getPartners() //declare a function which can be called from BP. once called all code within the enclosing {} will be run
{
    var searchResults = document.getElementsByClassName("findASolicitorListItem"); //search the web page for all elements with a specific tag and store them in a variable called searchResults.

    if(searchResults.length == 0) // If the number 
    {
        alert( "No Solicitors were found.");
    }else if(searchResults.length == 1)
    {
        var innerSearchResults = searchResults[0].getElementsByTagName("span");

        for(i = 0; i < innerSearchResults.length; i++)
        {
            var spanText = innerSearchResults[i].innerText.toString();

            if((spanText != ""))
            {
                if(!includes(spanText, "|"))
                {
                    alert("One Solicitor found. " + spanText);
                }
            }
        }

    }else if (searchResults.length > 1)
    {
        alert( "More than one solicitor was found. Manual Checking required.");
    }
}

This is stored in a data item and is passed into the Navigate stage (Insert Javascript Fragment) parameter.

PrintScreen of Insert Javascript Fragment stage

When this stage is ran it successfully injects the Javascript functions into the webpage.

I then try and invoke this inserted javascript fragment

Printscreen of Invoke Javascript Function stage

When this stage runs I get the following error message raised by Blue Prism.

Internal : Failed to perform step 1 in Navigate Stage 'Analyse Result' on page 'Analyse Search Results' - Failed while invoking javascript method:Exception from HRESULT: 0x80020101-> at mshtml.HTMLWindow2Class.IHTMLWindow2_execScript(String code, String language) at BluePrism.ApplicationManager.HTML.clsHTMLDocument.InvokeJavascriptMethod(String methodname, String jsonargs, Object& retval, String& sErr)

I have searched for this error code and found this answer which indicates there is a problem with the code however I can manually run this code just fine.

Does anyone have any experience with using these methods in BluePrism or have seen this error message before who can help me resolve?


回答1:


To invoke function by action "Invoke Javascript function", in Arguments field you should put arguments in JSON syntax. If there is no argument you put "[{}]".

On the above Marek's example the function should look:

function sayHello(name)
{
    alert("Hello " + name.name + "!");
}

and arguments: "[{'name':'world'}]".




回答2:


I was actually never able to get Invoke Function working reliably with parameters, I always use Insert Fragment for everything, invoking included.

If you insert this function as a fragment...

function sayHello(name)
{
    alert("Hello " + name + "!");
}

...to invoke it you just insert this as another fragment:

sayHello("World");

Tadaa!

As a side note, I am not sure which element in Application Modeler you are using for fragment insertion, but it seems like you are using the root (application) node. I had better experience with inserting the fragment to a dedicated HTML BODY element, for some reason the performance is much greater.



来源:https://stackoverflow.com/questions/53537198/unable-to-invoke-inserted-javascript-fragment

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!