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

标签 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

最佳答案

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();
}

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

关于javascript - Selenium:如何检查匿名函数的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42034887/

相关文章:

javascript - 如何使用 jquery 或 javascript 获取 tabcontainer ID?

javascript - 检查数组中的所有值是否为 false

python - 使用 python 和 selenium 自动化谷歌登录显示 ""此浏览器或应用程序可能不安全""

java - 为什么这段 Java 代码不将整个列表写入文本文件?

javascript - Uncaught ReferenceError : driver is not defined while switching to Default Content through Selenium WebDriver

javascript - 在 HTML 中,如何使用 jquery 和 cgi 让 AJAX 将按钮点击发布到 .pay?

javascript - 这是顺序运行代码片段的好方法吗?

java - 在不实际获取关联实体的情况下设置@ManyToOne 或@OneToOne 关系

java - 如何使用内存来提高该算法的运行时间?

java - 当字节数为奇数时,如何从 ByteBuffer(Little Endian)中获取 long?