1

我正在使用量角器.js。使用它我可以登录到我的应用程序。但是在立即登录后,会有一个弹出窗口,我需要从中选择一个下拉值。但是使用 protractor.js 我无法做到这一点。代码如下所述。

  describe('angularjs homepage todo list', function() {
      it('should add a todo', function() {
          browser.ignoreSynchronization = true;
        browser.get('https://sample.com');

        //browser.waitForAngular();
        //browser.sleep(10000);
         browser.pause();
        element(by.id('userId')).sendKeys('johny.selvaraj@test.com');
        browser.manage().timeouts().pageLoadTimeout(5000);
        element(by.id('password')).sendKeys('*********');
        browser.manage().timeouts().pageLoadTimeout(5000);
        **element(by.className('id-login-button wk-button-primary wk-button-full')).click();**
        //browser.manage().timeouts().pageLoadTimeout(5000);
         //browser.ignoreSynchronization = false;
         browser.sleep(20000);
        browser.switchTo().defaultContent();

         browser.wait( done => {  
         return element(by.model('productSelectionCtrl.selectedProduct')).isPresent();
         })
         .then(()=>{
         element(by.model('productSelectionCtrl.selectedProduct')).click();
         element(by.cssContainingText('option', 'Master Suite')).click();
         browser.sleep(20000);

         done;
         });

      });

    });

我的代码一直在工作,直到加粗的行。之后,我选择了要单击的弹出窗口的类名,并且需要从具有 ng-model(productSelectionCtrl.selectedProduct) 的下拉列表中选择一个值“Master suite”。但这还没有完成。你能帮我解决这个问题吗?

我什至尝试使用 (browser.ignoreSynchronization = false;) 因为我的主页是有角度的页面,但结果是徒劳的。请帮我从该下拉列表中选择一个值。也许问题出在等待或超时。下面提到了我在控制台中遇到的错误。

Failures:
1) angularjs homepage todo list should add a todo
  Message:
    Error: Timeout - Async callback was not invoked within timeout specified by
jasmine.DEFAULT_TIMEOUT_INTERVAL.
  Stack:
    Error: Timeout - Async callback was not invoked within timeout specified by
jasmine.DEFAULT_TIMEOUT_INTERVAL.
        at tryOnTimeout (timers.js:232:11)
        at Timer.listOnTimeout (timers.js:202:5)

1 spec, 1 failure
Finished in 36.928 seconds

[18:20:14] I/launcher - 0 instance(s) of WebDriver still running
[18:20:14] I/launcher - chrome #01 failed 1 test(s)
[18:20:14] I/launcher - overall: 1 failed spec(s)
[18:20:14] E/launcher - Process exited with error code 1
4

1 回答 1

1

by.className需要一个类。如果要使用多个类,请使用CSS 选择器定位器:

$('.id-login-button.wk-button-primary.wk-button-full').click();

请注意,如果您使用ESLinteslint-plugin-protractor插件(绝对是无耻的自我推销),您可能会更早地发现这个错误 - 有一个相关的no-compound-classes规则。

作为旁注,尽量避免使用browser.sleep(),而是使用browser.wait()一组内置的Expected Conditions

于 2017-05-03T13:27:24.340 回答