1
gefunden

ich auf meiner Seite mit einem id ein Element, dh <p id="blabla">The Text</p>Protractor interactive (elementExplorer) zeigt Ergebnis unabhängig davon, ob Element

Als ich Winkelmesser des elementExplorer laufen, dh protractor ./config/protractor-conf.js --elementExplorer http://localhost:9001, und ich tippe element(by.id('blabla')) bekomme ich ein Element Ergebnis (kopiert unten).

Allerdings erkannte ich, dass, wenn ich eine dumme ID (d. H. foo) geben, bekomme ich scheinbar das gleiche Ergebnis. Ich habe erwartet, einen Fehler oder eine Nachricht "nicht gefunden" zu erhalten. Wie kann ich feststellen, ob das Element tatsächlich existiert oder nicht?

Das Ergebnis jederelement(by.id()) Aufruf:

> element(by.id('foo')) 
ElementFinder { 
    ptor_: 
    Protractor { 
    getProcessedConfig: [Function], 
    forkNewDriverInstance: [Function], 
    restart: [Function], 
    controlFlow: [Function], 
    schedule: [Function], 
    setFileDetector: [Function], 
    getSession: [Function], 
    getCapabilities: [Function], 
    quit: [Function], 
    actions: [Function], 
    touchActions: [Function], 
    executeScript: [Function], 
    executeAsyncScript: [Function], 
    call: [Function], 
    wait: [Function], 
    sleep: [Function], 
    getWindowHandle: [Function], 
    getAllWindowHandles: [Function], 
    getPageSource: [Function], 
    close: [Function], 
    getCurrentUrl: [Function], 
    getTitle: [Function], 
    findElementInternal_: [Function], 
    findElementsInternal_: [Function], 
    takeScreenshot: [Function], 
    manage: [Function], 
    switchTo: [Function], 
    driver: 
     WebDriver { 
     session_: [Object], 
     executor_: [Object], 
     flow_: [Object], 
     fileDetector_: null }, 
    element: { [Function] all: [Function] }, 
    '$': [Function], 
    '$$': [Function], 
    baseUrl: 'http://localhost:9001', 
    rootEl: 'body', 
    ignoreSynchronization: false, 
    getPageTimeout: 10000, 
    params: {}, 
    ready: 
     Promise { 
     flow_: [Object], 
     stack_: null, 
     parent_: null, 
     callbacks_: null, 
     state_: 'fulfilled', 
     handled_: true, 
     value_: null, 
     queue_: null }, 
    plugins_: 
     Plugins { 
     setup: [Function], 
     teardown: [Function], 
     postResults: [Function], 
     postTest: [Function], 
     onPageLoad: [Function], 
     onPageStable: [Function], 
     waitForPromise: [Function], 
     waitForCondition: [Function], 
     pluginObjs: [], 
     assertions: {}, 
     resultsReported: false }, 
    resetUrl: 'data:text/html,<html></html>', 
    trackOutstandingTimeouts_: true, 
    mockModules_: [ [Object] ], 
    allScriptsTimeout: 11000, 
    dbgCodeExecutor_: 
     { execPromise_: [Object], 
     execPromiseResult_: undefined, 
     execPromiseError_: undefined, 
     replServer_: [Object], 
     execute_: [Function], 
     execute: [Function], 
     complete: [Function], 
     resultReady: [Function], 
     getResult: [Function] } }, 
    then: null, 
    parentElementArrayFinder: 
    ElementArrayFinder { 
    ptor_: 
     Protractor { 
     getProcessedConfig: [Function], 
     forkNewDriverInstance: [Function], 
     restart: [Function], 
     controlFlow: [Function], 
     schedule: [Function], 
     setFileDetector: [Function], 
     getSession: [Function], 
     getCapabilities: [Function], 
     quit: [Function], 
     actions: [Function], 
     touchActions: [Function], 
     executeScript: [Function], 
     executeAsyncScript: [Function], 
     call: [Function], 
     wait: [Function], 
     sleep: [Function], 
     getWindowHandle: [Function], 
     getAllWindowHandles: [Function], 
     getPageSource: [Function], 
     close: [Function], 
     getCurrentUrl: [Function], 
     getTitle: [Function], 
     findElementInternal_: [Function], 
     findElementsInternal_: [Function], 
     takeScreenshot: [Function], 
     manage: [Function], 
     switchTo: [Function], 
     driver: [Object], 
     element: [Object], 
     '$': [Function], 
     '$$': [Function], 
     baseUrl: 'http://localhost:9001', 
     rootEl: 'body', 
     ignoreSynchronization: false, 
     getPageTimeout: 10000, 
     params: {}, 
     ready: [Object], 
     plugins_: [Object], 
     resetUrl: 'data:text/html,<html></html>', 
     trackOutstandingTimeouts_: true, 
     mockModules_: [Object], 
     allScriptsTimeout: 11000, 
     dbgCodeExecutor_: [Object] }, 
    locator_: 
     name(name) { 
      return By.css('*[name="' + escapeCss(name) + '"]'); 
     } { using: 'css selector', value: '*[id="blabla"]' }, 
    actionResults_: null, 
    getWebElements: [Function], 
    click: [Function], 
    sendKeys: [Function], 
    getTagName: [Function], 
    getCssValue: [Function], 
    getAttribute: [Function], 
    getText: [Function], 
    getSize: [Function], 
    getLocation: [Function], 
    isEnabled: [Function], 
    isSelected: [Function], 
    submit: [Function], 
    clear: [Function], 
    isDisplayed: [Function], 
    getOuterHtml: [Function], 
    getInnerHtml: [Function], 
    getId: [Function], 
    getRawId: [Function], 
    serialize: [Function], 
    takeScreenshot: [Function] }, 
    elementArrayFinder_: 
    ElementArrayFinder { 
    ptor_: 
     Protractor { 
     getProcessedConfig: [Function], 
     forkNewDriverInstance: [Function], 
     restart: [Function], 
     controlFlow: [Function], 
     schedule: [Function], 
     setFileDetector: [Function], 
     getSession: [Function], 
     getCapabilities: [Function], 
     quit: [Function], 
     actions: [Function], 
     touchActions: [Function], 
     executeScript: [Function], 
     executeAsyncScript: [Function], 
     call: [Function], 
     wait: [Function], 
     sleep: [Function], 
     getWindowHandle: [Function], 
     getAllWindowHandles: [Function], 
     getPageSource: [Function], 
     close: [Function], 
     getCurrentUrl: [Function], 
     getTitle: [Function], 
     findElementInternal_: [Function], 
     findElementsInternal_: [Function], 
     takeScreenshot: [Function], 
     manage: [Function], 
     switchTo: [Function], 
     driver: [Object], 
     element: [Object], 
     '$': [Function], 
     '$$': [Function], 
     baseUrl: 'http://localhost:9001', 
     rootEl: 'body', 
     ignoreSynchronization: false, 
     getPageTimeout: 10000, 
     params: {}, 
     ready: [Object], 
     plugins_: [Object], 
     resetUrl: 'data:text/html,<html></html>', 
     trackOutstandingTimeouts_: true, 
     mockModules_: [Object], 
     allScriptsTimeout: 11000, 
     dbgCodeExecutor_: [Object] }, 
    locator_: 
     name(name) { 
      return By.css('*[name="' + escapeCss(name) + '"]'); 
     } { using: 'css selector', value: '*[id="blabla"]' }, 
    actionResults_: null, 
    getWebElements: [Function], 
    click: [Function], 
    sendKeys: [Function], 
    getTagName: [Function], 
    getCssValue: [Function], 
    getAttribute: [Function], 
    getText: [Function], 
    getSize: [Function], 
    getLocation: [Function], 
    isEnabled: [Function], 
    isSelected: [Function], 
    submit: [Function], 
    clear: [Function], 
    isDisplayed: [Function], 
    getOuterHtml: [Function], 
    getInnerHtml: [Function], 
    getId: [Function], 
    getRawId: [Function], 
    serialize: [Function], 
    takeScreenshot: [Function] }, 
    click: [Function], 
    sendKeys: [Function], 
    getTagName: [Function], 
    getCssValue: [Function], 
    getAttribute: [Function], 
    getText: [Function], 
    getSize: [Function], 
    getLocation: [Function], 
    isEnabled: [Function], 
    isSelected: [Function], 
    submit: [Function], 
    clear: [Function], 
    isDisplayed: [Function], 
    getOuterHtml: [Function], 
    getInnerHtml: [Function], 
    getId: [Function], 
    getRawId: [Function], 
    serialize: [Function], 
    takeScreenshot: [Function] } 

Antwort

1

Dies ist, wie Protractor nach Design funktioniert - Sie erhalten eine "Element nicht gefunden" Fehler nicht erhalten bis mit dem Element beginnen. Zum Beispiel versuchen Aufruf:

> element(by.id('something_that_does_not_exist')).getText() 

Hier die reference in the documentation ist, dass zu unterstützen:

Das Element() Funktion gibt ein ElementFinder Objekt. Der ElementFinder kann das DOM-Element mithilfe des Locators lokalisieren, den Sie als Parameter übergeben haben. Dies ist jedoch noch nicht geschehen. Es wird keine Verbindung zum Browser hergestellt, bis eine Aktionsmethode aufgerufen wurde.

+0

Lassen Sie mich die Referenz in den Dokumenten auch finden, geben Sie mir etwas Zeit. – alecxe

+0

Vielen Dank für die Aufklärung! – CodyBugstein

+0

@CodyBugstein Sie sind willkommen, fügte das Zitat und den Link zu den Dokumenten hinzu. Ich hoffe, das hilft. – alecxe