programing

프로젝터 브라우저기다림은 기다리지 않다

linuxpc 2023. 3. 17. 19:39
반응형

프로젝터 브라우저기다림은 기다리지 않다

저는 그 브라우저를 추측하고 있습니다.wait는 블로킹콜이어야 하는데 예상대로 동작하지 않습니다.샘플은 다음과 같습니다.

describe("browser.wait", function() {
    beforeEach(function() {
        browser.wait(function() {
            console.log('1 - BeforeEach WAIT');
            return true;
        });
    console.log('2 - BeforeEach after wait');
});

afterEach(function() {
    browser.wait(function() {
        console.log('4 - afterEach WAIT');
        return true;
    });
    console.log('5 - afterEach after wait');
});

it('should probably actually wait.', function() {
    console.log('3 - IT statement');
    expect(1).toBe(1);      
});

브라우저라고 가정했기 때문입니다.wait는 실제로 차단되어 있어 console.log 콜은 1,2,3,4,5 순으로 실행된다고 생각했습니다.

실제 출력은 다음과 같습니다.

2 - BeforeEach after wait  
1 - BeforeEach WAIT  
3 - IT statement  
5 - afterEach after wait  
4 - afterEach WAIT  

브라우저는 어떻게 구할 수 있나요?기다릴까?아니면 완전히 잘못된 기능을 사용하고 있는 건가요?브라우저가 다음 콜에 필요한 위치에 도달할 때까지 차단할 것이 필요합니다.

그것은 모두 약속에 관한 것이다(실제로 모든 쟁취자의 질문은 약속에 관한 것이다).

browser.wait() 는 블로킹콜이 아니라 조건을 대기하는 명령어를 스케줄링합니다.

일부 사용자 지정 함수에 의해 정의된 대로 조건이 유지되기를 대기하는 명령을 스케줄링합니다.대기 상태를 평가하는 동안 오류가 발생하면 전파가 허용됩니다.조건이 webdriver.promise를 반환하는 경우.폴링 루프가 해결되기를 기다렸다가 해결된 값을 사용하여 조건이 충족되었는지 여부를 평가합니다.약속의 해결 시간은 대기 시간이 초과되었는지 여부에 반영됩니다.

전달하고 있는 함수를 바로 호출하는 것이 아니라 명령어를 스케줄링하고 해결되기를 기다립니다(내부 함수가 약속을 반환하는 경우).

사용할 수 있습니다.then()이 경우 올바른 순서를 설정합니다.

beforeEach(function() {
    browser.wait(function() {
        console.log('1 - BeforeEach WAIT');
        return true;
    }).then(function () {
        console.log('2 - BeforeEach after wait');
    });
});

사용 사례는 여기를 참조하십시오.

Wait 함수는 특정 함수에 대한 실행을 보류하지만 JavaScript는 비동기 방식으로 작동합니다.따라서 대기 기능 전에 함수가 실행될 가능성이 있습니다.이를 더 잘 이해하려면 각진/절도기로 약속을 읽어야 합니다.

코드를 작동시키려면 .then(function(){});(함수 2에 첫 번째 완료까지 대기하도록 요청해야 합니다.

browser.wait(function() {
    console.log('1 - BeforeEach WAIT');
    return true;
}).then(function () {
    console.log('2 - BeforeEach after wait');
});

절단기에게 다음 시간까지 일시정지하도록 지시해야 합니다.browser.wait를 사용하여 완료됩니다.await

it('test case', async () => {
  await browser.wait(function() {
    console.log('1 - BeforeEach WAIT');
    return true;
  });
  console.log('2 - BeforeEach after wait');
});

언급URL : https://stackoverflow.com/questions/27803314/protractor-browser-wait-doesnt-wait

반응형