问题标签 [selenium]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1552 浏览

selenium - 使用 Selenium 检索数据

我想从我附近的丰业银行分行获取营业时间。

基本 URL 是: http: //maps.scotiabank.com/

那我,

单击“分支”单选框。

点击“周六开放”复选框。

在搜索框中输入“B3H 1M7”(我的邮政编码)。

单击搜索按钮。

单击弹出的第一个结果(Micmac 购物中心)。

将营业时间存储为变量(称为 businessHours)。

现在我被困住了。

如何将分配给变量的数据导出到文本文件或以后可以查看的其他任何地方?我不确定 Selenium 是否可以做到这一点,但如果不是,你能告诉我如何做到这一点的替代方法吗?

下面是我拥有的当前 Selenium 脚本的 HTML 代码。

0 投票
5 回答
4748 浏览

javascript - 在 javascript 中读取萤火虫控制台

我正在寻找一种方法来读取记录到 firebug 控制台的最新命令。

例如,我可以做一些事情

然后另一段(伪)代码可以

调试语句的上下文将在被测代码中,控制台检查将在 selenium 脚本中完成。这将让我观察深埋在 js 函数中的信息以及在运行时构建的东西。

0 投票
15 回答
3861 浏览

unit-testing - 硒的意义何在?

好吧,也许我错过了一些东西,但我真的不明白 Selenium 的意义。使用代码打开浏览器、使用代码单击按钮、使用代码检查文本的意义何在?我阅读了该网站,我看到理论上自动对您的 Web 应用程序进行单元测试会很好,但最后编写所有这些代码而不是仅仅点击并直观地验证事情是否工作需要更多的时间?

我不明白...

0 投票
4 回答
1286 浏览

continuous-integration - 集成在 Selenium 中的 xHTML 标记检查器

最近,我在思考如何通过在持续集成机器上使用持续检查 xHTML 源代码来提高项目的质量。

看,我们有一个项目

http://sourceforge.net/projects/jtidy - jTidy JTidy 是 HTML Tidy 的 Java 端口,一个HTML syntax checker漂亮的打印机。

它可以通过命令行界面验证 xHTML。或者这个工具可以按照我们需要的方式进行扩展,因为所有源代码都是开放的。

我们可以覆盖每个 Selenium 验证方法,例如 assertTextPresent 或任何其他方法,因此它将调用 jTidy(通过提供当前状态的 HTML 源),如果发生一些错误或警告 - 它可以保存到持续集成机器构建的日志 - 因此任何项目的相关人员都可以看到此信息。

我们不能重写所有的 Selenium 方法,在每一步都集成这个调用,而是在我们想要的地方进行这个调用(在 DOM 操作之后)。

是的,我们可以为我们的网站使用 W3C 标记验证器,但没有任何可能使用此验证器验证页面源的初始状态。在页面创建之后,可能会有很多 DOM 操作会产生标记错误/警告——我们可以通过这个方案立即找到它。

使用持续集成的好处之一是您可以从代码中获得快速反馈——它如何与现有代码库集成,测试单元和功能测试是否通过。为什么不获取额外的有用信息,例如即时 xHTML 标记验证状态。我们越早发现问题,就越容易解决它。

我还没有在谷歌上找到关于这个主题的任何东西。并且想知道,你对这个想法有什么看法?

0 投票
1 回答
3744 浏览

automation - 我可以使用 Selenium 访问 DOM 对象吗?

我来自 QuickTest Pro 背景,我可以使用 .object 方法访问任何元素的 DOM 对象。我想知道 Selenium RC 中的等价物是什么。

0 投票
14 回答
43577 浏览

java - Selenium click() 事件似乎并不总是被触发 => 导致超时?

这就是我所做的:

链接“mylink”确实存在,第一次调用 click() 总是有效的。但是第二次 click() 有时似乎有效,有时无效。

看起来 click() 事件根本没有触发,因为页面甚至没有开始加载。不幸的是,这种行为是不确定的。

这是我已经尝试过的:

  1. 设置更长的超时时间
    => 没有帮助

  2. 加载一页后等待元素出现
    =>也不起作用,因为页面甚至没有开始加载

现在我最终调用了 click() 两次,所以:

这会起作用,但这不是一个非常好的解决方案。我还在另一个论坛上看到有人建议写类似“clickAndWaitWithRetry”的东西:

但我认为这也不是一个合适的解决方案....任何想法/解释为什么有时不触发 click() 事件?

0 投票
3 回答
3541 浏览

ruby-on-rails - 夹具和 Selenium 和 Rails(哦,我的?)

你在 Rails 应用程序上的 Selenium 测试中使用了哪些数据?你从固定装置加载吗?使用现有的开发数据库?使用单独的(非夹具)数据库?

我在这里考虑我的选择。我有一个带有大型 Selenium 测试套件的 Rails 应用程序,该套件在 Selenium Grid 的修改版本上运行。现在,该过程的一部分是在测试套件运行之前加载大量的固定装置。这是很多数据。其中大部分是报告从我们的生产数据库导出的信息。当我最初设置它时,我将数据从 Oracle 导出到 yaml。

现在一些报告表中的模式发生了变化,所以我当然必须重新生成夹具数据。它太多了,不值得手动编辑文件。但是对于每个小的模式更改都必须重新生成似乎效率低下 - 更不用说这是另一个需要记住的步骤。有没有更好的办法?

编辑:我最初打算在每次测试之前加载固定装置并在每次测试之后卸载它们,就像常规的 Rails 测试一样。但由于此报告数据,加载灯具大约需要 15 分钟。有 200 多个测试,套件每 12 小时运行一次。我不能弯曲时空队长!

编辑2:我也同意拥有这么多固定装置是一种难闻的气味。不过,我不确定如何减少它,因为报告汇总了大量数据,而硒测试的大部分价值在于它们测试了报告。

即使它是一小组数据,但是……它仍然是另一个与架构更改保持协调的数据集。(我们为单元、功能和 [Rails] 集成测试提供了一个单独的、较小的集合。)

这让我回到了我最初的问题——除了手工操作或记住每次都重新生成它们之外,还有其他选择吗?

0 投票
7 回答
103327 浏览

gwt - 如何使用 XPath 仅选择可见元素?

我有一个GWT应用程序,我正在尝试使用Selenium为其编写一些测试。

我正在使用 XPath 来识别页面上用于测试的元素。由于这些值是由 GWT 自动生成的并且可以更改,因此使用id将不起作用。id当我意识到我可以通过标签找到按钮时,事情开始进展顺利,如下所示:

但是,当我开始运行多个测试时,我开始遇到问题。我意识到问题在于一旦由 Javascript 生成的 GWT 应用程序的所有不同“页面”都保留在 HTML 中的隐藏<div>元素中。这意味着我的 Selenium 测试有时会单击隐藏按钮而不是当前视图中可见的按钮。

使用Firebug检查 HTML ,似乎 GWT<div>通过添加元素display: nonestyle属性来隐藏元素。这意味着我可以找到所有隐藏的确定按钮,如下所示:

这将找到所有隐藏的 OK 按钮,即具有祖先的按钮,该祖先<div>被隐藏display: nonestyle.

我的问题是:如何使用 XPath 仅查找可见的 OK 按钮?如何在 中找到没有祖先<div>元素display: none的按钮style

0 投票
2 回答
1998 浏览

java - 测试失败时,Selenium 无法杀死浏览器

在测试失败的情况下,如何设置 Selenium 以终止测试浏览器页面?

目前,当运行 Selenium 测试用例并且测试失败时,浏览器页面保持打开状态,当大量测试失败时会导致问题。有趣的是,当测试通过时,情况并非如此。

有什么建议吗??

0 投票
5 回答
5136 浏览

unit-testing - 硒测试后清理数据

我正在为内部 Web 应用程序设置一些 Selenium 测试,并寻求有关测试“最佳实践”的建议。其中一项测试将通过 UI 添加一些无法通过 UI 删除的数据(例如,您可以通过 Web 应用程序添加记录,但删除需要在内部联系某人以在数据库级别删除它)。在 Selenium 测试运行后,您通常如何清理数据?

有问题的应用程序是用 PHP 编写的,我使用 PHP 进行测试(使用 Selenium RC 和 SimpleTest),但我对其他工具等持开放态度,因为这只是一个广泛的最佳实践问题。正在测试的应用程序在我们的开发环境中,所以我并不特别担心测试中的数据会被带走。

一些想法:

  1. Selenium测试中手动连接数据库清理数据
  2. 使用类似DBUnit的东西来管理这个?
  3. 只需添加数据,不用担心清理它(也就是惰性方法)

谢谢!

编辑:似乎大多数想法都围绕着相同的结论:处理一组已知数据并在测试完成时恢复。这个机制可能会因语言、数据量等而有所不同,但这看起来应该可以满足我的需要。