无法单击并使用protractor.js从弹出窗口的下拉列表中选择一个值

时间:2017-05-03 13:22:36

标签: javascript angularjs protractor gulp-protractor protractor-net

我正在使用protractor.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;
         });

      });

    });

我的代码正在工作,直到变为粗体的行。之后,我点击了弹出窗口的类名,需要从下拉列表中选择一个值为“Master suite”的值,其中包含ng-model(productSelectionCtrl.selectedProduct)。但这还没有完成。能帮帮我吧。

我甚至尝试使用(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

1 个答案:

答案 0 :(得分: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