微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Selenium WebDriver:我可以在多大程度上依赖JavaScript?

我正在开发一个库,它使用一些自定义命令扩展Selenium 2.该库应该可以从Selenium的 JavaPython绑定以及Selenium IDE中使用.从我的 research开始,这三个目标绑定应该覆盖所有Selenium 2脚本的至少80%.

为了实现我的Selenium IDE自定义命令,我想我需要在JavaScript中为它编写一个插件.

我的问题是:如果我已经在JavaScript中实现了我的自定义命令,那么将这个实现重用于我的库的Java和Python绑定是否安全?

我正在考虑一种方法,通过WebDriver#executeScript注入我的命令的JavaScript实现.这是我正在考虑的伪代码实现.

在Java中:

public void fooJava() {
    executeScript("Inject code.js");
    executeScript("fooJavaScript();");
}

在code.js中:

function fooJavaScript() {
    // Implementation of command "foo" from Selenium IDE plugin.
}

因此,要在Java中执行我的自定义命令fooJava(),我的库的code.js将通过executeScript注入浏览器.这将包含foo的JavaScript实现,比如fooJavaScript.在下一个executeScript调用中,将调用此fooJavaScript.

虽然这种方法会阻止我不得不三次实现我的自定义命令(Java,Python,Selenium IDE),但我有一些顾虑:

>当我注入我的code.js时,我是否有摧毁网站全局状态的危险?
>我可以在多大程度上依赖JavaScript?如果存在警告对话框,它会起作用吗?在实践中,Selenium使用的驱动程序中有多少不支持JavaScript?例如.的HtmlUnit?
>这适用于所有主流浏览器(IE,Chrome,Firefox,Safari的近期版本)吗?

您对此的真实体验将非常感激.

解决方法

原则规定,如果您只是使用WebDriver提供有效负载,则不应使用JS作为测试机制.

WebDriver = integration testsJS =如果你想要单元测试

我完全不了解您的用例,但是:

如果您正在尝试运行集成测试,请坚持使用WebDriver来最好地模拟用户交互.您还可以通过依赖WebDriver挂钩与页面交互来避免跨浏览器JS问题,因为您最好依靠社区为每个浏览器提供可靠的基本DOM交互API.如果您无法通过浏览器交互触发测试条件,那么您将进入单元/代码测试领域而不是集成测试.

如果您为了基本上测试单个函数代码而不是集成交互而尝试运行JS,那么您正在尝试运行单元测试.单元测试最好在JS中完成,例如Jasmine(在这里命名任何框架).

推理:
应该将集成测试编写为尽可能独立于实现.您不需要知道函数名称来触发集成测试,因为有人可能会在将来更改函数名称或重构代码.
由于您正在填写QE /测试人员角色,因此您不希望在代码更改时负责破坏集成测试 – 如果您使用此代码并负责,则每次进行代码重组时都需要更改测试.

资料来源:10,000名员工软件公司的QE经验.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐