我已经尝试了很多在堆栈溢出中使用protractorjs切换到iframe的示例,到目前为止,这些示例对我来说都没有用。我希望其他人遇到了这个问题,也许可以为我提供一些见识。
我的问题:我可以填写WorldPay iframe上的所有字段,然后单击“提交”,但是当切换回角度应用程序时,我找不到任何元素。
请参阅下面的示例代码示例,该示例代码在代码的最后一行返回“未找到元素” ...
browser.waitForAngular();
browser.ignoreSynchronization=true;
browser.switchTo().frame(element(by.tagName('iframe')).getWebElement());
element(by.css("input[data-worldpay='name']")).sendKeys("MR TEST ACCOUNT");
element(by.css("input[data-worldpay='number']")).sendKeys("5555555555554444");
element(by.css("input[data-worldpay='exp-month']")).sendKeys("02");
element(by.css("input[data-worldpay='exp-year']")).sendKeys("2022");
element(by.css("input[data-worldpay='cvc']")).sendKeys("123");
element(by.id("_el_button_save")).click();
browser.switchTo().defaultContent();
browser.waitForAngular();
browser.ignoreSynchronization=false;
element(by.id("button_confirm")).click();
我尝试过的其他事情
答案 0 :(得分:0)
通过等待iframe的陈旧解决了问题。即使页面已更改,也许iframe仍位于元素的顶部。无论如何,此代码都是解决方案……
// 4) Check for example with Protractor expectedConditions if the iframe is gone
var EC = protractor.ExpectedConditions;
// Waits for the ifram to be no longer present on the dom.
browser.wait(EC.stalenessOf($('iframe')), 5000);
由于此帖子而获得的积分... Detecting Whether An Iframe Is Angular Or Not With Protractor
答案 1 :(得分:0)
尝试
(function() {
'use strict';
angular.module('Admin.pages.masters', ['ui.select', 'ui.bootstrap', 'ngSanitize'])
// .run(function($rootScope){
// $rootScope.arr = ['System Admin','System Manager', 'System User'];
// })
.config(routeConfig);
/** @ngInject */
function routeConfig($stateProvider, $httpProvider) {
//localStorageServiceProvider.setStorageType('localStorage');
//console.log(localStorage.getObject('userData'));
$httpProvider.interceptors.push('authInterceptor');
$stateProvider
.state('main.master', {
url: '/master',
template: '<ui-view autoscroll="true" autoscroll-body-top></ui-view>',
abstract: true,
title: 'Masters',
sidebarMeta: {
icon: 'icoMasters',
order: 2,
},
authenticate: true,
params: { // <-- focusing this one
authRoles: ['System Admin', 'System Super Admin'] // <-- roles allowed for this module
}
})
.state('main.master.license', {
url: '/license',
template: '<ui-view autoscroll="true" autoscroll-body-top></ui-view>',
title: 'Customer License',
sidebarMeta: {
order: 0,
},
authenticate: true,
params: { // <-- focusing this one
authRoles: ['System Admin', 'System Super Admin'] // <-- roles allowed for this module
}
})
代替
browser.driver.switchTo().defaultContent();
我认为您没有成功切换回默认内容。