簡體   English   中英

未捕獲的ReferenceError:在HTMLInputElement.onclick中未定義functionXXX

[英]Uncaught ReferenceError: functionXXX is not defined at HTMLInputElement.onclick

在我的硒自動化測試中,我正在使用遠程Webdriver並嘗試如下啟動html文件。 HTML頁面可以正確打開,但是在代碼的最后,我試圖單擊提交按鈕,該按鈕調用了javascript函數(ActionDeterminator())。 當單擊該按鈕以調用js函數(ActionDeterminator())時,我在控制台中看到了我在底部提到的錯誤。

以下是html:

String butNowButton = "<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN>" +
        "<HTML><HEAD>" +
        "<META http-equiv='Content-Type' content='text/html'; charset='UTF-8'>" +
        "<META content='MSHTML 6.00.2900.3157' name='GENERATOR'></HEAD>" +
        "<BODY>" +
        "<H1>Hello It's a testing page</H1>" +
        "<HR>" +

        "<P>Enter the following fields and press the button to initiate Transaction" +
        "transaction</P>" +
        "<FORM name=SSO action='' method='post'>" +
        "<TABLE border='1'>" +
        "  <TBODY>" +
        "  <TR>" +
        "    <TD>Name(*): </TD>" +
        "    <TD><INPUT title='Name' value='Adam' name='Name'>" +
        "  </TD></TR>" +
        "  <TR>" +

       "    <TH colSpan='2'><INPUT id='btnSubmit' onclick='return ActionDeterminator();' type='submit' value='Go to Content catalog' name='btnSubmit'>" +
        "    </TH></TR></TBODY></TABLE>" +
        "    <INPUT type=hidden value='https://someUrl/' name='HOOK_URL'>" +
        "</FORM>" +
        "<SCRIPT type='text/javascript' name='JavaScript'>" +
        "function ActionDeterminator()" +
        "{" +
        "document.SSO.action=document.SSO.URL.value+'/Buyer/Main/ad/somePath/DirectAction';" +
        "alert('URL is ==>'+document.SSO.action);" +
        "document.SSO.submit();" +

        "}" +

        "</SCRIPT>" +

        "<HR>" +
        "</BODY></HTML>";
  //Below is the quick code to use above html and launch a page. This also //works fine, ( in the sense, html page is opened).

  String htmlDiv = "var div=document.createElement('div');div.innerHTML=\"" + butNowButton + "\";arguments[0].appendChild(div);";

System.err.println("***" + htmlDiv);
//'dr' is basically remote webdriver.
WebElement element = dr.findElementsByTagName("BODY").get(0);

dr.executeScript(htmlDiv, element);

//below code tries to invoke function ActionDeterminator().
dr.executeScript("document.getElementById('btnSubmit').click();","");

在控制台中,我看到以下錯誤:

data:,:1 Uncaught ReferenceError: ActionDeterminator is not defined
    at HTMLInputElement.onclick (data:,:1)
    at <anonymous>:248:70
    at callFunction (<anonymous>:237:33)
    at <anonymous>:247:23
    at <anonymous>:248:3
onclick @ data:,:1
(anonymous) @ VM50:248
callFunction @ VM50:237
(anonymous) @ VM50:247
(anonymous) @ VM50:248
data:,:1 Not allowed to navigate top frame to data URL: data:,

如果在DOM中使用onclick事件處理程序,則應將ActionDeterminator函數定義放在<head>或window.onload事件的回調中。

我在瀏覽器devtool的控制台中嘗試了您的代碼,它報告了相同的錯誤,即使我嘗試了JQuery.click()或addEventLister('click'),也都無法正常工作。

似乎瀏覽器本身不支持以下行為:加載頁面后,元素的事件腳本會動態添加到元素中。

所以這個問題與Selenium無關,瀏覽器本身並不支持。

最終明白了。 此處提供的解決方案均無效,因此我更改了html並使用eval()塊調用了該函數。 這對我有用,只需添加此內容即可為他人提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM