【问题标题】:Load JS script from file system and execute it with selenium从文件系统加载 JS 脚本并使用 selenium 执行它
【发布时间】:2015-04-20 12:51:43
【问题描述】:

我想用 js.executeScript Selenium 的方法执行一个 yui js 脚本。 该脚本由 selenium webdriver 执行,以模拟混合移动应用程序上的“点击”(按钮为 webview)

 String IncludeYUI = "script = document.createElement('script');script.type = 'text/javascript';script.async = true;script.onload = function(){};script.src = '"
                    + YUI_PATH
                    + "';document.getElementsByTagName('head')[0].appendChild(script);";
            js.executeScript(IncludeYUI);

YUI_PATH 是一个 url - https://cdnjs.cloudflare.com/ajax/libs/yui/3.18.0/yui/.....

问题是我无法从当前站点访问全球网络。

所以我想将脚本保存在项目下,然后从 FS 加载它。 不过这是个js,没办法访问FS...

任何想法如何加载脚本?

谢谢

【问题讨论】:

  • 你是如何加载页面开始的?
  • 我没有页面可以启动,只是执行js代码来点击一些webElement
  • 您可以将 your library 的整个文本内容(将所有换行符作为文字删除)复制粘贴到您使用 js.executeScript(s) 执行的 String s 中。之后,您的库应该可用。
  • @halex - 感谢您的回答,您能否解释一下“将所有换行符作为文字删除”?
  • @Igal 删除库中所有出现的换行符(就像您想最小化它一样)以将源作为一个大字符串。这仅在所有语句都以; 正确终止时才有效,否则您需要遍历库的代码并将其转换为您可以手动使用的形式。

标签: javascript selenium dynamic-script-loading resource-loading


【解决方案1】:

所以,您正在某个地方加载一个 html 页面,对吗?从概念上讲,您将以相同的方式加载 JS 文件:向服务器发出请求以加载 JS 文件,就像加载 html 页面一样。

看起来像这样:

<script src="scripts/yourFile.js">

另外,我从未见过有人像您在代码示例中那样加载 js 文件...我绝对会建议在您的 html 中放置一个脚本标签。

您可能还想发布您的 html 代码;我们将能够提供更好的帮助。如果需要,我会相应地更新这个答案。

【讨论】:

  • 没有 HTML 代码。主要想法是点击混合移动应用程序上的 webelement。 'js' 是一个带有 selenium 包的 JavascriptExecutor
  • 最终执行的代码如下(日志文件): --> POST /wd/hub/session/fd19efd9-1365-4a2d-9613-19a19b4d518f/execute {"script":"script = document.createElement('script');script.type = 'text/javascript';script.async = true;script.onload = function(){};script.src = 'yui-min.js';document. getElementsByTagName('head')[0].appendChild(script);","args":[]}
  • 好吧,那我有点迷路了。所以你正在使用 selenium ......并且你正在将 JS 加载到你的 selenium 创建的浏览器会话中?所以你将代码注入现有的 html 页面?您可能想尝试在原始问题中更多地解释整个问题。很有可能从防火墙/DMZ 后面的某个本地服务器加载 JS 文件/无论如何,如果您无法访问外部世界,但如果不更好地了解您要完成的工作,我们可能无法对你有很大帮助。
  • '为了模拟混合移动应用程序上的“点击”'——这不太正确。您将 YUI 库注入到页面中。而且我仍然不明白为什么......无论您正在测试什么网站,都有自己的责任来导入 JS 文件,而不是您的 selenium 代码。您的 selenium 代码将 JS 文件的下载 注入 到该 html 页面的头部。让我们先备份一下:该站点当前已经引入了什么 JS?图像或css怎么样?如果你能找到它,你可以保留一份本地副本并将其放在相同的一般位置,我们可以从那里开始......
  • 更好的是,自己在浏览器中加载 html 页面。然后请将当前的 部分粘贴到您的原始问题中。
【解决方案2】:

最后,经过多次尝试,some1 建议我使用 jquery。 经过一番挖掘,我使用了带有 jquery 的 tap 的 executeScript,它工作了......

$('#btn_login_button').trigger('tap');

我想知道所有其他带有点击和元素坐标的方法都不起作用

【讨论】:

    猜你喜欢
    • 2018-03-25
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2022-11-02
    相关资源
    最近更新 更多