- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图让我的测试稳定,但有时它没有等待集成弹出窗口中的所有元素并且失败了。
这个测试用例有点复杂,因为它在另一个 if 语句中包含 if 语句,以便为 FireFox 和 Chrome 运行相关代码(它们对弹出窗口有不同的处理),
第二个条件是用户已经登录并且不应该点击 id="loadlogin"的元素。
被测元素的CSS:
<input type="submit" value="Log in to your PayPal account" id="loadLogin" name="login_button" class="parentSubmit">
测试用例-代码:
it('Exisiting Client LiveSite - Payments - Continue To Payment', function () {
element(by.binding("client_zone.payous.new.continue")).click();
waitPageToLoad();
});
it('Exisiting Client LiveSite - Payments - Perform a payment by PayPal', function () {
var loadLogin = element(by.id("loadLogin"));
browser.wait(EC.visibilityOf(element(by.binding("buttonText"))), 15000);
element(by.binding("buttonText")).click();
if (browser === 'firefox') {
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[handles.length - 1]);
element.all(by.id('loadLogin')).then(function(){
// expect(browser.driver.getCurrentUrl()).toContain('www.paypal.com');
if (loadLogin) {
loadLogin.click();
browser.driver.sleep(3000);
element(by.id("login_email")).sendKeys("username");
element(by.id("login_password")).sendKeys("password");
browser.driver.sleep(1000);
element(by.id("submitLogin")).click();
browser.driver.sleep(5000);
element(by.id("submit.x")).click();
browser.driver.sleep(10000);
console.log("-=-=- first condition - FF -=-=-");
} else {
element(by.id("login_email")).clear();
browser.driver.sleep(1000);
element(by.id("login_email")).sendKeys("username");
element(by.id("login_password")).sendKeys("password");
browser.driver.sleep(1000);
element(by.id("submitLogin")).click();
browser.driver.sleep(10000);
element(by.id("submit.x")).click();
browser.driver.sleep(10000);
console.log("-=-=- second condition - FF -=-=-")
}
});
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[0]);
});
});
}
else {
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[1]);
element.all(by.id('loadLogin')).then(function(){
// expect(browser.driver.getCurrentUrl()).toContain('www.paypal.com');
if (loadLogin) {
loadLogin.click();
browser.driver.sleep(3000);
element(by.id("login_email")).sendKeys("username");
element(by.id("login_password")).sendKeys("password");
browser.driver.sleep(1000);
element(by.id("submitLogin")).click();
browser.driver.sleep(5000);
element(by.id("submit.x")).click();
browser.driver.sleep(10000);
console.log("-=-=- first condition - Chrome -=-=-");
} else {
element(by.id("login_email")).clear();
browser.driver.sleep(1000);
element(by.id("login_email")).sendKeys("username");
element(by.id("login_password")).sendKeys("password");
browser.driver.sleep(1000);
element(by.id("submitLogin")).click();
browser.driver.sleep(10000);
element(by.id("submit.x")).click();
browser.driver.sleep(10000);
console.log("-=-=- second condition - Chrome -=-=-")
}
});
browser.getAllWindowHandles().then(function (handles) {
browser.switchTo().window(handles[0]);
});
});
};
});
错误:
c:\automation\tests>protractor conf.js
Using the selenium server at http://localhost:4444/wd/hub
[launcher] Running 1 instances of WebDriver
imapConnected
LiveSite Portal - Existing client pay by PayPal
LiveSite - Home Page - pass
Exisiting Client LiveSite - Payments - Payment form - pass
LiveSite Portal - Exisiting client payments - Welcome note for existing client
- pass
Exisiting Client LiveSite - Payments - Continue To Payment - pass
-=-=- first condition - Chrome -=-=-
Exisiting Client LiveSite - Payments - Perform a payment by PayPal - fail
Failures:
1) LiveSite Portal - Existing client pay by PayPal Exisiting Client LiveSite -
Payments - Perform a payment by PayPal
Message:
ElementNotVisibleError: element not visible
(Session info: chrome=43.0.2357.130)
(Driver info: chromedriver=2.14.313457 (3d645c400edf2e2c500566c9aa096063e707c9
cf),platform=Windows NT 6.3 x86_64) (WARNING: The server did not provide any sta
cktrace information)
Command duration or timeout: 23 milliseconds
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'vCitaQA', ip: '192.168.152.1', os.name: 'Windows 8.1', os.ar
ch: 'amd64', os.version: '6.3', java.version: '1.8.0_25'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEn
abled=false, chrome={userDataDir=C:\Users\idan\AppData\Local\Temp\scoped_dir7328
_2982}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, versi
on=43.0.2357.130, platform=WIN8_1, browserConnectionEnabled=false, nativeEvents=
true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true,
browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEn
abled=true}]
Session ID: 64d27a4f28d3db93bbb59b8184c87a07
Stacktrace:
ElementNotVisibleError: element not visible
(Session info: chrome=43.0.2357.130)
(Driver info: chromedriver=2.14.313457 (3d645c400edf2e2c500566c9aa096063e707c9
cf),platform=Windows NT 6.3 x86_64) (WARNING: The server did not provide any sta
cktrace information)
Command duration or timeout: 23 milliseconds
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'vCitaQA', ip: '192.168.152.1', os.name: 'Windows 8.1', os.ar
ch: 'amd64', os.version: '6.3', java.version: '1.8.0_25'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEn
abled=false, chrome={userDataDir=C:\Users\idan\AppData\Local\Temp\scoped_dir7328
_2982}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, versi
on=43.0.2357.130, platform=WIN8_1, browserConnectionEnabled=false, nativeEvents=
true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true,
browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEn
abled=true}]
Session ID: 64d27a4f28d3db93bbb59b8184c87a07
at new bot.Error (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\
node_modules\selenium-webdriver\lib\atoms\error.js:113:18)
at Object.bot.response.checkResponse (C:\Users\idan\AppData\Roaming\npm\node
_modules\protractor\node_modules\selenium-webdriver\lib\atoms\response.js:106:9)
at C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\se
lenium-webdriver\lib\webdriver\webdriver.js:377:20
at [object Object].promise.ControlFlow.runInFrame_ (C:\Users\idan\AppData\Ro
aming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\
promise.js:1877:20)
at [object Object].promise.Callback_.goog.defineClass.notify (C:\Users\idan\
AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\
webdriver\promise.js:2464:25)
at [object Object].promise.Promise.notify_ (C:\Users\idan\AppData\Roaming\np
m\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.
js:563:12)
at Array.forEach (native)
at Object.goog.array.forEach (C:\Users\idan\AppData\Roaming\npm\node_modules
\protractor\node_modules\selenium-webdriver\lib\goog\array\array.js:203:43)
at [object Object].promise.Promise.notifyAll_ (C:\Users\idan\AppData\Roaming
\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promi
se.js:552:16)
at goog.async.run.processWorkQueue (C:\Users\idan\AppData\Roaming\npm\node_m
odules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:125:21)
Error
at [object Object].ElementArrayFinder.applyAction_ (C:\Users\idan\AppData\Ro
aming\npm\node_modules\protractor\lib\element.js:403:21)
at [object Object].self.(anonymous function) [as click] (C:\Users\idan\AppDa
ta\Roaming\npm\node_modules\protractor\lib\element.js:76:19)
at [object Object].self.(anonymous function) [as click] (C:\Users\idan\AppDa
ta\Roaming\npm\node_modules\protractor\lib\element.js:733:11)
at c:\automation\tests\payments.js:94:35
at [object Object].promise.ControlFlow.runInFrame_ (C:\Users\idan\AppData\Ro
aming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\
promise.js:1877:20)
at [object Object].promise.Callback_.goog.defineClass.notify (C:\Users\idan\
AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\
webdriver\promise.js:2464:25)
at [object Object].promise.Promise.notify_ (C:\Users\idan\AppData\Roaming\np
m\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.
js:563:12)
at Array.forEach (native)
at Object.goog.array.forEach (C:\Users\idan\AppData\Roaming\npm\node_modules
\protractor\node_modules\selenium-webdriver\lib\goog\array\array.js:203:43)
at [object Object].promise.Promise.notifyAll_ (C:\Users\idan\AppData\Roaming
\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\promi
se.js:552:16)
From: Task: Asynchronous test function: it()
at [object Object].<anonymous> (C:\Users\idan\AppData\Roaming\npm\node_modul
es\protractor\node_modules\jasminewd\index.js:93:33)
at [object Object].<anonymous> (C:\Users\idan\AppData\Roaming\npm\node_modul
es\protractor\node_modules\minijasminenode\lib\async-callback.js:45:37)
at [object Object].jasmine.Block.execute (C:\Users\idan\AppData\Roaming\npm\
node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:1174:1
7)
at [object Object].jasmine.Queue.next_ (C:\Users\idan\AppData\Roaming\npm\no
de_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2209:31)
at onComplete (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\nod
e_modules\minijasminenode\lib\jasmine-1.3.1.js:2205:18)
at [object Object].jasmine.WaitsForBlock.execute (C:\Users\idan\AppData\Roam
ing\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.j
s:2704:5)
at [object Object]._onTimeout (C:\Users\idan\AppData\Roaming\npm\node_module
s\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2718:12)
Error
at [object Object].<anonymous> (c:\automation\tests\payments.js:43:5)
at [object Object].jasmine.Env.describe_ (C:\Users\idan\AppData\Roaming\npm\
node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:913:21
)
at [object Object].jasmine.Env.describe (C:\Users\idan\AppData\Roaming\npm\n
ode_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:898:15)
at describe (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_
modules\minijasminenode\lib\jasmine-1.3.1.js:658:27)
at Object.<anonymous> (c:\automation\tests\payments.js:1:63)
Finished in 19.473 seconds
5 tests, 3 assertions, 1 failure
[launcher] 0 instance(s) of WebDriver still running
[launcher] chrome #1 failed 1 test(s)
[launcher] overall: 1 failed spec(s)
[launcher] Process exited with error code 1
c:\automation\tests> element.all(by.id('loadLogin')).then(function(){
'element.all' is not recognized as an internal or external command,
operable program or batch file.
c:\automation\tests>
最佳答案
我认为问题可能在于您没有切换到正确的窗口,因为窗口的顺序可能是动态的。这是我的建议,
- Before clicking on the
loadLogin
button I would save the main window handle. After all window handles are nothing but an array of hash- When you click on the login, just switch to the window that is NOT main window. This way you can perform login without having to blindly switching to a window. I think this will also simplify your firefox vs chrome logic
像这样的伪代码,
var mainWindow;
browser.getAllWindowHandles().then(
function(handles) {
mainWindow = handles[0]; //at this point there should be only 1 window
}
);
browser.getAllWindowHandles().then(function (handles) {
handles.forEach(function(handle) {
if (handle !== mainWindow) {
browser.switchTo().window(handle);
element.all(by.id('loadLogin')).then(function(){
//do more stuff
}
}
}
});
关于javascript - Protractor - 打开弹出窗口时,它不会等待此窗口内的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31245560/
https://github.com/mattdiamond/Recorderjs/blob/master/recorder.js中的代码 我不明白 JavaScript 语法,比如 (functio
在 iOS 7 及更早版本中,如果我们想在应用程序中找到 topMostWindow,我们通常使用以下代码行 [[[UIApplication sharedApplication] windows]
我已经尝试解决这个问题很长一段时间了:我无法访问窗口的 url,因为它位于另一个域上..有一些解决方案吗? function login() { var cb = window.ope
是否可以将 FFMPEG 视频流传递到 C# 窗口?现在它在新窗口中作为新进程打开,我只是想将它传递给我自己的 SessionWindow。 此时我像这样执行ffplay: public void E
我有一个名为 x 的矩阵看起来像这样: pTime Close 1 1275087600 1.2268 2 1275264000 1.2264 3 1275264300 1.2
在编译时,发生搜索,grep搜索等,Emacs会在单独的窗口中创建一个新的缓冲区来显示结果,有没有自动跳转到那个窗口的方法?这很有用,因为我可以使用 n 和 p 而不是 M-g n 和 M-g p 移
我有一个启动 PowerShell 脚本的批处理文件。 批处理文件: START Powershell -executionpolicy RemoteSigned -noexit -file "MyS
我有一个基于菜单栏的应用程序,单击图标时会显示一个窗口。在 Mac OS X Lion 上一切正常,但由于某种原因,在 Snow Leopard 和早期版本的 Mac OS X 上会出现错误。任何时候
在 macOS 中,如何在 Xcode 和/或 Interface Builder 中创建带有“集成标题栏和工具栏”的窗口? 这是“宽标题栏”类型的窗口,已添加到 OS X 10.10 Yosemit
在浏览器 (Chrome) 中 JavaScript: var DataModler = { Data: { Something: 'value' }, Process: functi
我有 3 个 html 页面。第 1 页链接到第 2 页,第 2 页链接到第 3 页(为了简单起见)。 我希望页面 2 中的链接打开页面 3 并关闭页面 1(选项卡 1)。 据我了解,您无法使用 Ja
当点击“创建节点”按钮时,如何打开一个新的框架或窗口?我希望新框架包含一个文本字段和下拉菜单,以便用户可以选择一个选项。 Create node Search node
我有一个用户控件,用于编辑应用程序中的某些对象。 我最近遇到一个实例,我想弹出一个新的对话框(窗口)来托管此用户控件。 如何实例化新窗口并将需要设置的任何属性从窗口传递到用户控件? 感谢您的宝贵时间。
我有一个Observable,它发出许多对象,我想使用window或buffer操作对这些对象进行分组。但是,我不想指定count参数来确定窗口中应包含多少个对象,而是希望能够使用自定义条件。 例如,
我有以下代码,它打开一个新的 JavaFX 阶段(我们称之为窗口)。 openAlertBox.setOnAction(e -> { AlertBox alert = AlertBox
我要添加一个“在新窗口中打开”上下文菜单项,该菜单项将以新的UIScene打开我的应用程序文档之一。当然,我只想在实际上支持多个场景的设备上显示该菜单项。 目前,我只是在检查设备是否是使用旧设备的iP
我正在尝试创建一个 AIR 应用程序来记录应用程序的使用情况,使用 AIR 从系统获取信息的唯一简单方法是使用命令行工具和抓取 标准输出 . 我知道像 这样的工具顶部 和 ps 对于 OS X,但它们
所以我有这个简单的 turtle 螺旋制作器,我想知道是否有一种方法可以打印出由该程序创建的我的设计副本。 代码: import turtle x= float(input("Angle: ")) y
我正在编写一个 C# WPF 程序,它将文本消息发送到另一个程序的窗口。我有一个宏程序作为我的键盘驱动程序 (Logitech g15) 的一部分,它已经这样做了,尽管它不会将击键直接发送到进程,而是
我尝试使用以下代码通过 UDP 发送,但得到了奇怪的结果。 if((sendto(newSocket, sendBuf, totalLength, 0, (SOCKADDR *)&sendAd
我是一名优秀的程序员,十分优秀!