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

我该如何等待状况?

雍嘉勋
2023-03-14
问题内容

我是量角器的新手,我正在尝试实施e2e测试。我不知道这是否是正确的方法,但是…我要测试的页面不是基于完整角度的页面,所以…我遇到了一些麻烦。

在我的第一个规范中,我有:

describe('should open contact page', function() {
var ptor = protractor.getInstance();

beforeEach(function(){

   var Login = require('./util/Login');
   new Login(ptor);
});

我已经创建了这个Login类,但是登录后我想打开联系页面,但是量角器会在页面完全加载之前立即尝试查找元素。

我尝试使用:

browser.driver.wait(function() {

    expect(browser.findElement(by.xpath("//a[@href='#/contacts']")).isDisplayed());
    ptor.findElement(by.xpath("//a[@href='#/contacts']")).click();

});

但这是行不通的……它总是在页面加载之前尝试查找元素。我也尝试过这个:

browser.driver.wait(function() {
    expect(ptor.isElementPresent(by.xpath("//a[@href='#/contacts']")));          
    ptor.findElement(by.xpath("//a[@href='#/contacts']")).click();
});

我可以使用来做到这一点,browser.sleep();但我认为这不是一个好选择。任何想法?在我的登录课程中,我有:

ptor.ignoreSynchronization = true;

@href='#/contacts在量角器尝试单击它之前,我如何等待它?


问题答案:

我在使用量角器时遇到了最长的相同问题。在我的e2e测试中,我从一个非角度应用开始,然后进入一个有角度的部分,然后又回到一个非角度的部分。使事情变得棘手。关键是要了解承诺及其工作方式。以下是在有效的e2e测试中我的真实世界代码的一些示例。希望这可以为您提供有关如何构建测试的想法。可能是该代码中的一些不好的做法,请随时对此进行改进,但是我知道它可以工作,也许不是最好的方法。

为了达到角度我使用

var ptor;
var events = require('events');
var eventEmitter = new events.EventEmitter();
var secondClick = require('./second-click');

beforeEach(function () {
    browser.driver.get('http://localhost:8080/');
},10000);

it("should start the test", function () {
    describe("starting", function () {
        it("should find the  link and start the test", function(){
            var elementToFind = by.linkText('Start'); //what element we are looking for
            browser.driver.isElementPresent(elementToFind).then(function(isPresent){
                expect(isPresent).toBe(true); //the test, kind of redundant but it helps pass or fail
                browser.driver.findElement(elementToFind).then(function(start){
                    start.click().then(function(){ //once we've found the element and its on the page click it!! :) 
                        ptor = protractor.getInstance(); //pass down protractor and the events to other files so we can emit events
                        secondClick(eventEmitter, ptor); //this is your callback to keep going on to other actions or test in another file
                    });
                });
            });
        });
    });
},60000);

在角度时,此代码有效

 describe("type in a message ", function(){
        it("should find and type in a random message", function(){
            var elementToFind = by.css('form textarea.limited');
            browser.driver.isElementPresent(elementToFind).then(function(isPresent){
                element(elementToFind).sendKeys(randomSentence).then(function(){
                    console.log("typed in random message");
                    continueOn();
                });
            });
        });
    },15000);

退出角度后

browser.driver.wait(function(){
   console.log("polling for a firstName to appear");
   return    browser.driver.isElementPresent(by.name('firstName')).then(function(el){
         return el === true;
       });
     }).
   then(function(){
       somefunctionToExecute()
    });

希望能提供一些指导并帮助您!



 类似资料:
  • 问题内容: 我在弄清楚如何使用Selenium的wait函数时遇到了麻烦。我正在尝试做的是检查元素是否存在以及是否存在,然后将打印一条语句。这是我的代码: 当前代码给我以下错误: 问题答案: 预期条件期望将元组传递进来,其中第一项是定位器的类型(常量),第二项是定位器的值: 请注意,您的情况会更简单:

  • 问题内容: 我只希望我的主线程在退出之前等待我所有的(p)线程完成。 线程来回移动的原因很多,我真的不想跟踪所有线程-我只想知道线程什么时候消失了。 wait()对子进程执行此操作,在没有子进程时返回ECHILD,但是wait(似乎不与(p)个线程一起工作)。 我真的不想麻烦保留每个未完成线程的列表(随它们来来去去),然后必须在每个线程上调用pthread_join。 有没有一种快速而又肮脏的方式

  • 我希望能够等待一个可观察的时间,例如。 天真的尝试会导致等待立即解析,而不会阻止执行 编辑:我的全部预期用例的伪代码是: 我知道我可以将其他代码移动到另一个单独的函数中,并将其传递到subscribe回调中,但我希望能够避免这种情况。

  • 问题内容: 我正在尝试编写一个JS代码,如果给定的数字已经存在于数据库中,它将取消“ btn_submit”按钮.onclick事件。我使用AJAX向数据库查询给定的编号,并确定是否应将数据发送到将上传问题的.php站点。为了确定这一点,我需要numOfRows变量的值,但是因为我在AJAX中将其设置为0,所以validation()函数将在我的AJAX查询完成之前完成,这将导致始终表示给定数字不

  • 问题内容: 我的问题: 如何在a上执行一堆线程对象并等待它们全部完成后再继续? 我是ThreadPoolExecutor的新手。因此,此代码是测试以了解其工作方式。现在我什至都不用对象填充,因为我不理解如何在不调用另一个队列的情况下开始队列。无论如何,现在我只是打电话给我,但我认为我仍然缺少一些东西。任何提示都很棒!谢谢。 RunnableObject类: 问题答案: 你应该循环

  • 我正在编写一个应用程序,用谷歌的凌空API执行一系列请求。问题是我不知道请求什么时候完成。在我进一步行动之前,我需要知道一个请求是否已经完成。我不能用while循环或sleep/wait方法等待一定时间,因为它似乎会停止执行请求的线程。显然,请求有onResponse回调,我可以用它来标记单个请求何时完成。但我有一个活动可以发出多个请求,我希望该活动处于待机状态,直到所有请求都得到处理。就像我说的