有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javascript Selenium:如何检查匿名函数的代码

对Selenium来说是个新概念。我有这个javascript代码片段,我正在尝试使用Selenium来检查脚本,但运气不好。我只想使用Selenium访问/检查脚本,以验证它是否在我的页面上

匿名函数:

<script type="text/javascript"> 
    (function(a,b,c,d){
        a='https://someurl.com:24800/somejs.js';
        b=document;
        c='script';
        d=b.createElement(c);d.src=a;d.type='text/java'+c;
        d.async=true;
        a=b.getElementsByTagName(c)[0];
        if (a.src !== d.src) { 
            a.parentNode.insertBefore(d,a);
        }
    })();
</script>

为了更清楚地说明问题,在另一个场景中,我成功地检索到分配给变量名的javascript片段,如下所示:

<script type="text/javascript"> 
    var my_var = { attribute_1:'something', attribute_2:'somethingElse'} 
</script>

然后在我的硒测试中

JavascriptExecutor jsEx = (JavascriptExecutor) driver;
Map<String, String> topScript = (Map<String, String>)jsEx.executeScript("return my_var");

这很好,我的topScript返回我能够解析的脚本。我想对上面的匿名函数做同样的事情(如果可能的话)

我已经试过这些帖子了,没有骰子:

Selenium calling anonymous function generates syntax error

Selenium and asynchronos JavaScript calls


共 (1) 个答案

  1. # 1 楼答案

    SCRIPT标记与其他标记一样是HTML标记。您可以使用XPath定位它和包含的文本

    List<WebElement> scripts = driver.findElements(By.xpath("//script[contains(., 'function(a,b,c,d)')]"));
    if (!scripts.isEmpty())
    {
        // the script tag with the anonymous function was found
        // do stuff
    }
    

    我喜欢为我计划重用的代码编写函数。下面的函数查找您传入的代码,如果找到,则返回true

    public static boolean findCodeInScriptTag(String code)
    {
        return !driver.findElements(By.xpath("//script[contains(., '" + code + "')]")).isEmpty();
    }
    

    注意:您需要传入足够多的代码,以确保您正在查找要查找的脚本标记,例如,如果您不够具体,则可能正在查找多个代码实例,并返回错误的传递结果