当前位置: 首页 > 面试题库 >

使用量角器测试非AngularJS页面上的登录

盖向荣
2023-03-14
问题内容

我有一个AngularJS应用,可使用GitHub上的oAuth
SSO进行身份验证。我试图找出一种使用量角器和自动化登录测试的方法。我无法弄清楚如何检索非角度字段以及如何管理页面加载的等待时间browser.driver,我的规范如下所示:

// Create a repository                                                                                                                     
describe('login', function() {

  it('should login', function() {
      // this issues a redirect to GitHub
      browser.driver.get( process.env.HOST + '/auth/github' ) 
      browser.sleep( 4000 ); // Sleep to make sure page loads fully..                                                                      
      // browser.debugger(); // tried to use debugger...                                                                                   
      var login = element( by.id( "login_field" ) );
      login.sendKeys( process.env.USERNAME );
      var password = element( by.id( "password" ) );
      password.sendKeys( process.env.PASSWORD )
  });                                                                                                                                      
});

我这样运行命令:

HOST=http://someserver.com.dev USERNAME=foobar PASSWORD=barfoo protractor config/protractor.conf

如何正确加载身份验证页面,在字段中输入正确的信息,然后等待重定向回到我的Angularized应用程序(我可以从那里处理事情)。

我试图使用调试器跳入此代码,但对我而言这并不直观。当调试器阻塞时,我似乎不在代码中,而是在cli.js中。如果我点击“
c”,那么我的脚本将一直执行直到失败,并且没有进一步阻止。我是否误解了在脚本中的哪里使用debugger命令?而且,我希望可以使用Chrome检查器,
window.clientSideScripts.findInputs但也遭到了挫败。这些似乎是针对AngularJS元素的,而不是未成角度的元素。


问题答案:

使用量角器测试非角度页面对于等待内容可能很棘手。

我建议您将Protractor升级到最新版本(截至目前为1.5.0),使用自定义函数waitReady()来browser.wait准备就绪的元素,然后像下面那样重写测试。

// TODO: use page objects
var loginNameInputElm = $('#login_field'); // or element(by.id('login_field'))
var passwordInputElm = $('#password'); // same as element(by.id('password'))
var loginBtnElm = $('button[type=submit]');

it('non-angular page so ignore sync and active wait to load', function() {
    browser.ignoreSynchronization = true;
    browser.get(process.env.HOST + '/auth/github');
    expect(loginNameInputElm.waitReady()).toBeTruthy();
    expect(passwordInputElm.waitReady()).toBeTruthy();
});

it('should fill user and password and logins', function() {
    loginNameInputElm.sendKeys(process.env.USERNAME);
    passwordInputElm.sendKeys(process.env.PASSWORD);
    loginBtnElm.click();
});

it('restores ignore sync when switching back to angular pages', function() {
    browser.ignoreSynchronization = false; // restore
    browser.get('/some-angular-page');
});

为什么waitReady 在这里更多细节。

注意:过去我建议设置一个较高的隐式值,例如

browser.manage().timeouts().implicitlyWait(5000);

骇客 可让您避免waitReady并继续使用标准

expect(loginNameInputElm.isPresent()).toBeTruthy();

但是当测试 存在的元素时(即测试缺少或不可见的元素时)有一个丑陋的缺点,在这种情况下,它将等待5秒(5000毫秒)的叶片,例如

expect(someNonExistingElm.isPresent()).toBeFalsy();


 类似资料:
  • 我正在使用量角器为AngularJS应用程序开发一个自动化测试套件。 在开发测试脚本时,我一直使用,因此在执行脚本时,我必须手动告诉它继续执行测试的每一步。现在我很高兴我的测试能够正确执行,并且希望删除对的调用,这样我就可以让脚本自己运行到完成。 但是,我知道,我不能只删除对的调用,而不添加一些内容,允许测试在执行下一步之前暂停/等待浏览器加载(目前,在运行对的调用后,我告诉脚本继续所用的时间足以

  • 问题内容: 我发现了针对AngularJS Web应用程序制作的Protractor框架。 如何在未使用AngularJS的网站上使用Protractor? 我写了我的第一个测试,量角器触发了此消息: 问题答案: 如果您的测试需要与非角度页面进行交互,请使用直接访问webdriver实例。 量角器docs中的示例

  • 问题内容: 我希望能够使用Protractor测试我的Angular应用程序。由于我使用RequireJS,因此无法在DOM中使用指令,这就是为什么我使用手动引导Angular的原因。 量角器输出如下错误输出: 错误:在页面上找不到Angular :重试以寻找超出的角度 然后,我意识到量角器文档中有一个警告: 对于使用angular.bootstrap手动引导的应用,Protractor不能立即使

  • 问题内容: 我似乎无法通过测试成功获得PhantomJS。我试图将其集成到我的项目中,但是在此之后失败了,我尝试仅运行基本的Angular Docs示例,但遇到了同样的问题。到目前为止,我的步骤: // … GhostDriver-Main-在端口9515上运行 这是与示例中相同的文件,仅具有browserName,并且seleniumAddress端口已更改: 我收到以下错误消息: 我在gith

  • 问题内容: 我试图只是运行包含在Internet Explorer 上的量角器中的示例测试,并且不会太远:( 我尝试过将浏览器名称更改为“ internet Explorer”和 “ version”:11,并且我已注释掉directConnect(因为它对此有所抱怨 ) 我得到的错误是… WebDriverError:必须通过 webdriver.ie.driver系统属性设置驱动程序可执行文件

  • 问题内容: 我正在开发AngularJS应用,并希望使用Protractor进行端到端2端测试。我想从Browserstack上提供的测试浏览器套件中受益,并在Browserstack Automate而非本地Selenium服务器上运行测试。 如何设置系统以运行这些测试? 问题答案: 从版本3.0.0开始的量角器添加了对BrowserStack的内置支持。 您只需在您的浏览器中添加以下两个参数即