Protractor: рдЕрдкреЗрдХреНрд╖рд┐рдд рд╢рд░реНрддреЛрдВ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП ElementNotToBeCovered рд▓рд╛рдЧреВ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдЬреБрд▓ре░ 2015  ┬╖  48рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: angular/protractor

рджреЗрдЦреЗрдВ https://github.com/angular/protractor/issues/2139

PRs plz! easy untriaged user experience feature request

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

+1

рд╕рднреА 48 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИред рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдбрд░ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рдВрд╕ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╡рд╛рд▓реЗ рдЧреНрд▓реЛрдмрд▓рд┐рдХреНрд╕ рдореЗрдВ рдпрд╣ рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

+1

рдкреГрд╖реНрда рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдкреЙрдк рдЕрдк рдФрд░ рдУрд╡рд░рд▓реЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╢рд░реНрддреЗрдВ.elementToBeClickable рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ...

рд╣рд╛рдВ рдпрд╣! рдореИрдВ рд▓рдЧрд╛рддрд╛рд░ _ "рддрддреНрд╡ рдмрд┐рдВрджреБ (x, y) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред рдЕрдиреНрдп рддрддреНрд╡ рдХреЛ рдХреНрд▓рд┐рдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛:" _ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдФрд░ рдХрд┐рд╕реА рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рддреНрд░реБрдЯрд┐рдпрд╛рдВ .. рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ ~ 14% рд╕рдордп рдХреА рддрд░рд╣ .. рдирд┐рд░рд╛рд╢рд╛ рд╣реЛрддреАред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрд▓рд┐рдореЗрдВрдЯрд╡рд┐рдЬрд┐рдмрд▓ рдпрд╛ рдПрд▓рд┐рдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рднреА рд╣рдореЗрд╢рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

+1

+1

+1

рдореИрдВ ASAP рдЬрд╛рд░реА рдХреА рдЧрдИ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдореБрджреНрджрд╛ рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЙрдкрд╛рдп рд╣реИ?

+1

+1

+1

+1

@sjelin рдЖрдк рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдзрд╛рдЧреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛?

We would address this using document.elementFromPoint and element.getBoundingClientRect pretty easily actually. elementFromPoint isn't totally standard at this point, though it appears to be supported by all browsers. The consistency issue is real though. Donno if we should leave this the way it is or "fix" it

+1000000000

+999

+2000000

+2000000

+999

+1

+1

+1

+1
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдлрд┐рд░ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ +1 рдХреЗ рд╕рд╛рде рдореБрджреНрджреЛрдВ рдкрд░ рд╡реЛрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦреВрдВрдЧрд╛ред

рдХреГрдкрдпрд╛ рдЗрд╕ рдкреАрдЖрд░ рдХреЛ +{рдирдВрдмрд░} рдмрдВрдж рдХрд░реЗрдВред рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ...

рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рдЕрджреНрдпрддрди?
рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рддрддреНрд╡ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдЬреИрд╕реЗ рдХрд┐ рдореЛрдбрд▓ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред

var el = $('.myElement');
browser.executeScript('arguments[0].scrollIntoView()', el.getWebElement());

рд╣рдордиреЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд╣рдо рдЙрд╕ рддрддреНрд╡ ( id="spinner" ) рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рддрддреНрд╡ рдХреЛ "рдЕрд╡рд░реБрджреНрдз" рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдЕрд╡рд░реБрджреНрдз рддрддреНрд╡ рдХреЗ рдЕрджреГрд╢реНрдп рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ:
broswer.wait(EC.invisibilityOf($(тАШ#spinnerтАЩ)), 5000)

EC.invisibilityOf рд╣рдореЗрд╢рд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдХрднреА-рдХрднреА рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдПрдХ рддрддреНрд╡ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрддреНрд╡ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрджреГрд╢реНрдп рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдПрдХ рд▓рд┐рдВрдХ рдХреЛ рдЙрд╕рдХреЗ рдореВрд▓ div рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рд╕реВрдЪрдирд╛ рджреА рдЧрдИ рд╣реИ, рдФрд░ invisibilityOf рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред toNotBeCoveredBy рдХреА рдЗрдЪреНрдЫрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛

рдпрд╣ рдорд╛рдорд▓рд╛ 2 рд╕рд╛рд▓ рдкреБрд░рд╛рдирд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ? рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореИрдВ рддрддреНрд╡ рдХреЗ рдЕрджреГрд╢реНрдп рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрд╡рд░рд┐рдВрдЧ рддрддреНрд╡ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ рдЕрджреГрд╢реНрдп рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдФрд░ рдпрд╣ рддрддреНрд╡ рдХреЛ рджреГрд╖реНрдЯрд┐ рд╕реЗ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдмрд┐рдВрджреБ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдФрд░ рддрддреНрд╡ рд╣реЛрдЧрд╛ рдХреНрд▓рд┐рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

"toNotBeCoveredBy" рдХреЗ рд▓рд┐рдП +1

рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ:

"use strict";

function elementWithAttributeHasNotValue(htmlElement, attribute, value) {
    return htmlElement.getAttribute(attribute).then((elementAttribute) => {
        return !elementAttribute.includes(value);
    });
}

class Helper {
    waitForAngularInRoomAnimationToBeDone() {
        const inRoomElement = element(by.className("in-room"));

        browser.wait(elementWithAttributeHasNotValue(inRoomElement, "class", "ng-animate"), browser.params.DEFAULT_TIMEOUT_MS);
    }
}

module.exports = Helper;

рд╡рд┐рдзрд┐ рдФрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдирд╛рдо рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдлрд┐рд░ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

helper.waitForAngularInRoomAnimationToBeDone();

рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрдм рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдордп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрдХреНрд░реАрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕ рддрддреНрд╡ рдХреЛ рдореИрдВ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рд╣реИ рдЕрднреА рднреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛ рдХреНрд▓рд┐рдХ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдФрд░ рддрддреНрд╡ рдХреЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдпрд╛ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕рдХреНрд╖рдо рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдХреНрд░реЛрдо рдореЗрдВ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╣рд░ рдмрд╛рд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ, рдХреЗрд╡рд▓ 20% рд╕рдордп рдХреА рддрд░рд╣ред рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

@MihailSeykov рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдПрдиреАрдореЗрд╢рди рд╣реИ, рддреЛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рдПрдиреАрдореЗрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрддреНрд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИред рдЖрдк EC.and рдХрд╛ рдЙрдкрдпреЛрдЧ invisibilityOf рдХрдИ рддрддреНрд╡реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рддрддреНрд╡ рдХреЛ рдХрд╡рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдХрднреА-рдХрднреА рддрддреНрд╡ рдЕрднреА рднреА рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдиреАрдореЗрд╢рди рдХреЗ рдмрд╛рдж рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░

рдореИрдВ рдЙрди рд╕рднреА рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рджреЗрддреЗ рд╣реИрдВ (рдЬрдм рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдХрд░рддрд╛ рд╣реВрдВ)ред

рд▓реЗрдХрд┐рди,... рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбрд┐рдлрд╝реЙрд▓реНрдЯ/рдмреНрд▓реЙрдХ/рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЫрд┐рдкреЗ рд╣реЛрдиреЗ рдпрд╛ рдбреЛрдо рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдВрдж рдХреЗ рдЭреБрдВрдб рдХреЗ рдмрд┐рдирд╛ рдХреЛрдИ рднреА рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ рдЕрджреГрд╢реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдпрд╛ рджреГрд╢реНрдпрддрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдХрдИ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ ... рд▓реЗрдХрд┐рди рдРрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рдЬреЛ рд╣реИрдХреА рд╣реИрдХ рд╣реИрдХ рд╣реИрдХ рдирд╣реАрдВ рд╣реИрдВред

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рджреГрд╢реНрдпрддрд╛ рд╕рдорд╕реНрдпрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдпрд╣ 2 рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдЕрднреА рднреА рддрдп рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ ??! w/t рд╣реИрдХреНрд╕ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреГрдкрдпрд╛ ASAP рдХреЛ рдареАрдХ рдХрд░реЗрдВ!

рдХреНрдпрд╛ рдЙрд╕ рдкрд░ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИ :)
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдЦрд┐рд░рдХрд╛рд░ рдореБрдЭреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЗрд▓рд╛рдЬ рдорд┐рд▓ рдЧрдпрд╛ рдерд╛

рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдкрд░ рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдХрднреА рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдЗрд╕рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдХрд╛рдлреА рдкрд░реЗрд╢рд╛рдиреА рд╣реЛ рд░рд╣реА рд╣реИ...

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдпрд╣ рд░реЛрдбрдореИрдк рдкрд░ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЯреНрд░реИрдХреНрдЯрд░ рдХреЛрдб "рдкреНрд░рдорд╛рдг" рдХреЗ рд▓рд┐рдП рд╣реИ рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рд╣реИред рд╕рдВрднрд╡ рд╣реИ рдХрд┐?

рдореИрдВ рддрддреНрд╡ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рднреА рдмрд╣реБрдд рдХреБрдЫ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЕрднреА рднреА рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рднреА рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд╣рдХрд░, рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛!

рд╣рдореЗрдВ рд╡рд╣ рдХреМрди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдпрд╣ рднреА рд╕реЗрд▓реЗрдирд┐рдпрдо рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкрд╛рд╕ рдирдВрдмрд░ 1 рд╕рдорд╕реНрдпрд╛ рд╣реИред рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдирд┐рдореЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡реЗрдЯ рдЖрджрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ рдЫреЛрдЯреА рдЪреЗрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреА рд╣реИ, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдкрд░ рддреБрд░рдВрдд рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдЧрд╛:

import { ElementFinder, promise } from 'protractor';
export let testHelpers = {
  isClickable(el: ElementFinder): promise.Promise<boolean> {
    return new promise.Promise(resolve => {
      let interval = setInterval(() => {
        el.click().then(() => {
          clearInterval(interval);
          setTimeout(() => {
            resolve(true);
          }, 500);
        }, () => { });
      }, 100);
    });
  }
}

рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛрдб рдореЗрдВ:

import { testHelpers } from '../src/core/e2e/helpers';
describe('App', () => {
  it('should do something', () {
    let btn = $('.cls');
    browser.wait(testHelpers.isClickable(btn), 3000);
  });
});

рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдбреЛрдо рд╕реЗ рдЙрд╕ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЬреЛ рдЙрд╕ рддрддреНрд╡ рдХреЛ рдХрд╡рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
await browser.executeScript("arguments[0].remove();", coverElement);

рд╣рдо рд▓рдЧрднрдЧ 3 рд╕рд╛рд▓ рдореЗрдВ рд╣реИрдВ ... рдХреНрдпрд╛ рдпрд╣ рдЕрдиреБрд░реЛрдзрд┐рдд рд╕реБрд╡рд┐рдзрд╛ _Protractor_ рдХреЗ рднреАрддрд░ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ?
рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдПрдирд┐рдореЗрд╢рди рдХреЗ рд▓рд┐рдП sleep рдЬреЛ рдПрд▓рд┐рдореЗрдВрдЯ рдХреНрд▓рд┐рдХрдмрд┐рд▓рд┐рдЯреА рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рддрд╛ рд╣реИ

@nmfernandes рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдХрдо рдирд╛рдЯрдХреАрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА arguments[0].style.visibility='hidden'; рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХрд╛ рд╡рд┐рдЪрд╛рд░ рдорджрджрдЧрд╛рд░ рдерд╛ред рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд▓рдЧрднрдЧ 4 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рддрдЪреАрдд рдХреЗ рдмреАрдЪ рдЫреЛрдЯреА рдиреАрдВрдж рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, sleeps рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рдЬрдорд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ (рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рднреА) рдмрдЪрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдХреЛрдб рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдореБрдЭреЗ рдХреЗрд╡рд▓ рдХреНрд▓реЛрди рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрдердм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдкрд╛рд╕ рдХрд░реЗрдВред

рдореБрдЭреЗ рдмрд╣реБрдд рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЪрд╛рдВрджрд╛ рдХреА рдЯреАрдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреА рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рд╕реЗрд▓реЗрдирд┐рдпрдо рдпрд╛ рдХреНрд░реЛрдореЗрдбреНрд░рд┐рд╡рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

  • 1

рд╕реНрд╡рдпрдВ рдХреЛ рдЕрдирдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдм Google рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛

рдореИрдВрдиреЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди usinc async / рдЦреБрдж рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ 1 рдпрд╛ 2 рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ, elem рдФрд░
retryCount ред рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдкреНрд░рддреНрдпреЗрдХ .5 рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреА рдЬрд╛рддреА рд╣реИ рддреЛ рдпрд╣ рдлрд┐рд░ рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд░рд┐рдЯреНрд░реАрдХрд╛рдЙрдВрдЯ рд╕рдорд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдП рдпрд╛ рдмрдЯрди рдХреНрд▓рд┐рдХ рди рд╣реЛ рдЬрд╛рдПред

export const clickOnElementWithRetry = async (elem: ElementFinder, retryCount: number = 5) => {

    while (retryCount) {
        try {
            await elem.click();
            retryCount = 0;
        }
        catch (e) {
            if(retryCount === 0)
                throw "Couldn't click element";
            await browser.sleep(500);
            retryCount--;   
        }
    }

}

рдХрд▓реНрдкрдирд╛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдпрд╛ рдЬрд╣рд╛рдБ рднреА рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

import { clickOnElementWithRetry } from './helpers/';
it('Clicks on some element', async () => {

    const someButton = element(by.id("someElementId"));
    clickOnElementWithRetry(someButton)
})
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

davidkarlsen picture davidkarlsen  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

koshkarov picture koshkarov  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mvolkmann picture mvolkmann  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

smarts picture smarts  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vishalshivnath picture vishalshivnath  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ