【问题标题】:Wait for user action等待用户操作
【发布时间】:2018-05-15 21:06:43
【问题描述】:

我正在寻找解决方案,如果可以等待用户在量角器中输入的数据。

我的意思是测试停止一段时间,我可以输入一些值,然后将这些数据用于进一步的测试。

我尝试使用javascript提示,但我没有做太多,也许可以在OS终端输入数据?

如果可能,请给我一个例子。

【问题讨论】:

    标签: javascript selenium testing selenium-webdriver protractor


    【解决方案1】:

    我不建议混合使用自动和手动 selenium 浏览器控件。

    也就是说,您可以使用Explicit Waits 等待页面上发生某些事情,例如您可以等待文本出现在文本input 中,或者某个元素变得可见,或者页面标题等于您期望的内容,protractor 内置了不同的ExpectedConditions,而您可以轻松编写自己的自定义预期条件等待。不过,您必须设置一个合理的超时时间。


    或者,您可以通过browser.params传递用户定义的参数,请参阅:

    例子:

    protractor my.conf.js --params.login.user=abc --params.login.password=123
    

    然后,您可以通过browser.params 访问测试中的值:

    var login = element(by.id("login"));
    login.sendKeys(browser.params.login.user);
    

    【讨论】:

    • 感谢您的快速回答,但我的意思是别的,(我需要别的,我不需要等待元素加载到页面上)。我需要在测试期间输入一些数据,这取决于我在屏幕上看到的内容。例如,在测试期间,我在控制台中看到:“输入值”,我输入值并测试进入下一步
    • 但我没有输入框,在我测试的页面上。我想要由量角器创建的自己的输入框(提示或在控制台中输入数据)。
    • @tealang 好吧,我越来越接近你的问题了。您能否提供一个该问题的真实世界用例示例?谢谢。
    • @tealang nono,我的意思是,给我一个更大的图景和问题背后的动机。
    【解决方案2】:

    如果您的数据将驻留在控制台中,您可以使用以下方法获取该数据:

    browser.manage().logs().get('browser').then(function(browserLogs) {
       // browserLogs is an array which can be filtered by message level
       browserLogs.forEach(function(log){
          if (log.level.value < 900) { // non-error messages
            console.log(log.message);
          }
       });
    });
    

    然后如其他帖子中所述,您可以使用 driver.wait() 显式等待条件为真:

    var started = startTestServer(); 
    driver.wait(started, 5 * 1000, 
    'Server should start within 5 seconds'); 
    driver.get(getServerUrl());
    

    或者expected conditions,例如,如果等待多个条件。

    【讨论】:

    • 我想你没有理解我的问题。我想自己输入数据。我的意思是我想(在测试执行期间)创建提示(或其他东西)来输入数据,这些数据将用于测试。
    • 问题:您会在测试开始之前或测试期间知道这些数据是什么吗?你想达到什么目的?这些问题的答案将帮助我们更好地帮助您
    【解决方案3】:

    我也有同样的问题。经过长时间的搜索,我找到了 Protractor 5.3.2 的解决方案:

    var EC = protractor.ExpectedConditions;
    
    it('will pause for input...', function() {
        browser.ignoreSynchronization = true
        browser.waitForAngularEnabled(false);
    
        // open web page that contains an input (in my case it was captchaInput)
        browser.driver.get('https://example.com/mywebpagehere');
    
        // waits for 15 sec for the user to enter something. The user shall not click submit 
        browser.wait(EC.textToBePresentInElementValue(captchaInput, '999'), 15000, "Oops  :^(")   
            .then(function() {
                console.log('Hmm... Not supposed to run!');
            }, function() {
                console.log('Expected timeout, not an issue');
            });
    
        browser.sleep(1000);   
    
        // submit the user input and execution proceeds (in my case, captchaButton)
        captchaButton.click();
    
        // . . .
    });
    

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      相关资源
      最近更新 更多