- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的公司希望我使用 JBehave 和 Selenium 开发一个“可视化”GUI 风格的 BDD 功能,它使用 javascript 警告/确认弹出窗口来提示用户运行测试到达的确切步骤,例如:
所以我们想在自动化测试的时候在弹窗中加入Javascript alert window,弹窗有“OK”按钮,当用户点击OK按钮时,测试会继续下一步,以此类推。 ..
我的问题是:我使用 Selenium 的 executeScript API 编写了一个 javascript func,它调用弹出警报窗口:
public void stepText(String step) {
executeScript("alert('"+step+"');");
}
所以我希望当我点击确定按钮时,弹出的窗口会消失,测试将继续下一步......但是让我震惊的是,当我点击它时,测试抛出异常并崩溃......
异常是:selenium.WebDriverException
但我发现如果我添加以下代码使测试自动检测警报窗口并使用以下常用的 selenium 警报处理函数接受它:
Alert alert=switchTo().alert();
alert.accept();
这可以使测试运行良好,所以看起来我无法手动单击警报(我手动单击后,selenium 仍然无法返回浏览器...与浏览器失去连接?),但自动化警报句柄代码有效...
当然,我们想让用户手动点击alert窗口来控制测试执行,而不是自动处理alert。
我真的被困在这里一段时间了,做了很多谷歌搜索,但在网上找不到类似的例子,我希望你能告诉我,因为你在 JBehave 和 Selenium 方面比我高明得多.
如果你能帮助我,我将不胜感激。
最佳答案
Selenium 是一种浏览器自动化工具,它不会预测用户的交互。
因此,我会使用一个简单的 Java GUI 窗口向用户显示消息/选项。毕竟,您是在浏览器中测试 Web 应用程序,但程序本身是 Java,与浏览器无关。一个普通的 Swing 选项对话框就足够了。
JOptionPane.showMessageDialog(null, "登录成功。");
String loginAs = JOptionPane.showInputDialog("Login as:", "admin");
int choice = JOptionPane.showConfirmDialog(null, "使用生产数据?");
(请注意,您不想在 EventQueue.invokeLater()
block 中调用它,因为您希望对话框被阻塞)
这样,您就不会以任何方式与 Selenium 或浏览器进行交互,您不会混淆它,并且会干净利落地获得用户输入。
也就是说,如果您坚持使用警报,我认为这绝对可行,但截至目前(2013 年 6 月,Selenium 2.33.0),我不知道如何:
此问题无法在 IE8 上重现。在 executeScript("alert('Something.')");
调用之后,Selenium 等待调用返回一些内容,然后正常进行。所以你很擅长 IE。
但是,对于 FF21,Selenium 会立即失败并返回 UnhandledAlertException
正如你所说。
我尝试了两种明显的解决方案:
js.executeScript("alert('something')");
new WebDriverWait(driver, 10)
.pollingEvery(100, TimeUnit.MILLISECONDS)
.ignoring(UnhandledAlertException.class)
.until(ExpectedConditions.not(ExpectedConditions.alertIsPresent()))
.wait();
和
js.executeScript("alert('something')");
boolean alertVisible = true;
while (alertVisible) {
try {
driver.switchTo().alert();
} catch (NoAlertPresentException ignored) {
alertVisible = false;
}
}
两者都使 FF 因内部 JavaScript 异常而严重失败。可能是一个可能会被修复的错误(请测试它,check whether it had been reported 和 report it 如果您对此感兴趣),所以我将解决方案留给后代。
但正如我之前所说,它可能不会得到修复,因为 Selenium 不依赖于手动用户交互。
不确定这在其他浏览器中的表现如何。
关于selenium - Webdriver/Selenium Alert 窗口问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17033008/
我如何在 HP Fortify SSC 上定义警报,只有在发现新问题或自上次扫描以来问题数量增加时才会发出警报。 我可以定义一个包含静态问题数量的警报,但每次警报数量发生变化时都需要手动更新,我想避免
由于未知原因,我的 Alert.alert 拒绝工作。我基本上是在重用之前工作的代码。获取错误: Exception NSArrayl length; unrecognized selector se
我的注销用户功能似乎根本不起作用。我在登录时通过警报调用它,但它似乎没有调用它。如果我尝试在末尾添加“()”,它只会给我一个错误。 loginUser = (email, password) => {
alert() 和 window.alert() 函数有什么区别?看起来效果一样。 最佳答案 因为 window 是全局对象,您可以通过简写调用 alert:alert( 'Hello!' ); 或通
我正在尝试整理此错误消息: Exception '-[_NSDisctionary0 length]: unrecognized selector sent to instance 0x7896412
有什么方法可以改变 JavaScript 中alert 或prompt 的外观吗?诸如添加图像、更改字体颜色或大小之类的事情,以及任何会使它看起来不同的事情。 最佳答案 扩展 Matthew Abbo
我正在尝试创建一个警报,以确保用户提交了正确的信息,如果单击“确定”而不是取消,则单击链接并 发送。我几乎已经实现了,警报激活,但如果单击确定则不会激活。不幸的是,我还不是 js 向导...... 编
看起来 AngularJS $window.alert() 和 Javascript alert() 是一样的。在什么条件下我们应该使用其中的哪一个?还是根本没有区别? 最佳答案 这是一回事——Jav
我的应用需要在不同时间向用户显示一些信息。我决定使用 AlertControllers 但我不能同时显示两个 Alert Controllers。因此我需要知道是否显示了警报 Controller ,
在 Brad's tutorial Alerts 组件使用以下方式导出: export default withAlert(Alerts) 这导致了错误: The above error occurr
我正在使用 Twitter Bootstrap 3 并使用 jQuery AJAX 发送表单数据。这是我的代码: $.ajax({ type: $(form).attr('method
我遇到了 的问题(SSL 警报编号 46) 140097325019584:error:14094416:SSL routines:ssl3_read_bytes:sslv3 alert certif
我正在尝试使用 Alert React Native 中的组件以在 Android 和 iOS 之间创建一致的体验。我正在尝试运行示例警报。我导入了警报组件(为简洁起见省略了其他导入): import
考虑这段代码: var input = document.getElementById("hello"); input.addEventListener('blur', function() {
请检查代码, import { Alert, } from 'react-native'; checkForSendingOtp = () => { let hash = 'aBcDeG
我刚开始学习和练习 React Native,我遇到了第一个我自己似乎无法解决的问题。 我有以下代码,非常简单,但是当我在网络上运行时 Alert.alert() 不起作用。如果我单击该按钮,则没有任
在 Safari 浏览器中遇到一个问题,以下是我的场景(带示例)。 当我点击删除帐户的按钮时,我会打开警告消息。在该警报窗口中有两个操作“确定”和“取消”。如果我单击"is",它将重定向到另一个 UR
使用 Cordova CLI 版本 5.4.1,平台是iOS,在 iOS 模拟器上运行 来 self 应用的 onDeviceReady处理程序,我正在调用一个函数来设置一个 Hook ,以便使用 n
我正在使用 selenium IDE。我需要验证在成功填写数据并单击保存按钮后显示的闪现消息。 我正在使用 assertText css=div.alert.alert-success × Succe
我有一个 .pfx 文件,在 Windows 客户端上使用时可以完美连接到远程服务器。我现在想使用 Linux 客户端连接到服务器。 问题 1) 我使用以下 openssl 命令从 pfx 文件中提取
我是一名优秀的程序员,十分优秀!