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

时间:2017-02-03 23:57:01

标签: javascript java selenium selenium-webdriver

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>

然后在我的Selenium测试中......

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 个答案:

答案 0 :(得分: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();
}

注意:您需要传递足够的代码以确保找到您想要的脚本标记,例如:如果你不够具体,你可能会找到多个代码实例并返回错误的传递结果。