简体   繁体   中英

Selenium IDE always returns "true" on XPath evaluation

I am working on a test in the Selenium IDE, which (among other things) looks at login.microsoftonline.com to check if a particular username is listed in the accounts that have authenticated before (from a particular browser, on a particular PC).

I am trying to evaluate for the desired username with:

return document.evaluate("//*[@data-test-id='correctusername@domain.com']", document) !== null

But it doesn't matter what I put in as the string, the variable is always set to "true".

硒试验

The element I am looking at is:

<div class="row">
    <div id="tilesHolder" class="form-group" role="list" aria-labelledby="tileError loginHeader"
        data-bind="attr: { 'data-test-asynctilesloaded': !isTileRequestPending() }" data-test-asynctilesloaded="true">
        <!-- ko foreach: { data: sessions, as: 'session' } -->
        <div class="tile-container" data-bind="component: { name: 'tile-field',
                params: {
                    serverData: svr,
                    session: session,
                    hasFocus: $index() === 0,
                    ariaDescribedBy: $index() === 0 ? 'tileError loginHeader' : null,
                    isLogoutRequest: $parent.isLogoutRequest,
                    tileIndex: $index() },
                event: {
                    tileClick: $parent.tile_onClick,
                    forgetComplete: $parent.tile_onForgetComplete } },
                css: { 'binaryChoice list': svr.fSupportWindowsStyles }"><!--  -->

            <div class="row tile" role="listitem">
                <div class="table" tabindex="0" role="button" data-bind="
        attr: {
            'data-test-id': session.unsafe_name,
            'data-test-idp': session.idp,
            'data-test-hometenant': session.homeTenantName || '' },
        css: { 'list-item': svr.fSupportWindowsStyles },
        ariaLabel: unsafe_helpText,
        ariaDescribedBy: ariaDescribedBy,
        click: tile_onClick,
        pressEnter: tile_onClick,
        hasFocus: hasFocus" data-test-id="wronguser@domain.com" data-test-idp="0" data-test-hometenant=""
                    aria-label="Sign in with wronguser@domain.com work or school account."
                    aria-describedby="tileError loginHeader">
                    <div class="table-row">
                        <div class="table-cell tile-img">
                            <!-- ko if: session.idp === 0 -->
                            <img class="tile-img" role="presentation"
                                pngsrc="https://aadcdn.msftauth.net/shared/1.0/content/images/picker_account_aad_725681b49f77650b9c9b970eb784476c.png"
                                svgsrc="https://aadcdn.msftauth.net/shared/1.0/content/images/picker_account_aad_f83ebff69a4a1685e4dc9650cdab8886.svg"
                                data-bind="imgSrc"
                                src="https://aadcdn.msftauth.net/shared/1.0/content/images/picker_account_aad_f83ebff69a4a1685e4dc9650cdab8886.svg">
                            <!-- /ko -->

                            <!-- ko if: session.idp === 1 --><!-- /ko -->
                        </div>

                        <div class="table-cell text-left content"
                            data-bind="css: { 'content': !svr.fSupportWindowsStyles }">
                            <div
                                data-bind="text: ((session.isSignedIn || session.isSamsungSso) &amp;&amp; session.unsafe_fullName) || session.unsafe_displayName">
                                wronguser@domain.com</div>

                            <!-- ko if: (session.isSignedIn || session.isSamsungSso) && session.fullName --><!-- /ko -->

                            <!-- ko if: session.isSignedIn && !session.isWindowsSso && !session.isSamsungSso && !iFrameSrc() --><!-- /ko -->

                            <!-- ko if: session.iFrameSrc --><!-- /ko -->

                            <!-- ko if: session.isWindowsSso --><!-- /ko -->

                            <!-- ko if: session.isSamsungSso --><!-- /ko -->
                        </div>
                    </div>
                </div>

                <!-- ko ifnot: hideTileMenu -->
                <div class="table-cell tile-menu tile-menu-float">
                    <div tabindex="0" role="button" data-bind="
                click: menu_onClick,
                pressEnter: menu_onClick,
                hasFocus: menuFocused,
                ariaLabel: str['TILE_STR_MenuAltText'],
                attr: {
                    'data-test-id': session.unsafe_name + '-menu-dots',
                    'data-test-idp': session.idp,
                    'aria-controls': 'tileMenu' + tileIndex,
                    'aria-expanded': menuOpen().toString() }" aria-label="Open menu"
                        data-test-id="wronguser@domain.com-menu-dots" data-test-idp="0" aria-controls="tileMenu0"
                        aria-expanded="false">

                        <!-- ko component: 'accessible-image-control' --><!-- ko if: (isHighContrastBlackTheme || hasDarkBackground || svr.fHasBackgroundColor) && !isHighContrastWhiteTheme --><!-- /ko -->
                        <!-- ko if: (isHighContrastWhiteTheme || (!hasDarkBackground && !svr.fHasBackgroundColor)) && !isHighContrastBlackTheme -->
                        <!-- ko template: { nodes: [darkImageNode], data: $parent } --><img role="presentation"
                            pngsrc="https://aadcdn.msftauth.net/shared/1.0/content/images/picker_more_ced331c132b5f798f1f3ab36712d4608.png"
                            svgsrc="https://aadcdn.msftauth.net/shared/1.0/content/images/picker_more_7568a43cf440757c55d2e7f51557ae1f.svg"
                            data-bind="imgSrc"
                            src="https://aadcdn.msftauth.net/shared/1.0/content/images/picker_more_7568a43cf440757c55d2e7f51557ae1f.svg"><!-- /ko -->
                        <!-- /ko --><!-- /ko -->
                    </div>
                </div>
                <!-- /ko -->
            </div>

            <ul class="menu" role="menu" data-bind="
    visible: menuOpen,
    if: menuOpen,
    attr: { 'id': 'tileMenu' + tileIndex }" id="tileMenu0" style="display: none;"></ul>

            <!-- ko if: iFrameSrc --><!-- /ko -->

            <!-- ko if: forgetIFrameSrc --><!-- /ko -->
        </div>
        <!-- /ko -->

        <!-- ko if: isTileRequestPending --><!-- /ko -->

        <!-- ko if: unsafe_signupTileText --><!-- /ko -->

        <!-- ko ifnot: isLogoutRequest || svr.fShowSignupTile -->
        <div class="row tile" role="listitem">
            <div id="otherTile" class="table" tabindex="0" role="button" aria-labelledby="otherTileText" data-bind="
                    css: { 'list-item': svr.fSupportWindowsStyles },
                    click: otherTile_onClick,
                    pressEnter: otherTile_onClick">
                <div class="table-row">
                    <div class="table-cell tile-img">
                        <img class="tile-img" role="presentation"
                            pngsrc="https://aadcdn.msftauth.net/shared/1.0/content/images/picker_account_add_c9929da7ed2c1ed4745e4035cf5441cd.png"
                            svgsrc="https://aadcdn.msftauth.net/shared/1.0/content/images/picker_account_add_56e73414003cdb676008ff7857343074.svg"
                            data-bind="imgSrc"
                            src="https://aadcdn.msftauth.net/shared/1.0/content/images/picker_account_add_56e73414003cdb676008ff7857343074.svg">
                    </div>

                    <div class="table-cell text-left content"
                        data-bind="css: { 'content': !svr.fSupportWindowsStyles }">
                        <div id="otherTileText" data-bind="text: otherTileText">Use another account</div>
                    </div>
                </div>
            </div>
        </div>
        <!-- /ko -->
    </div>
</div>

We can see "data-test-id="wronguser@domain.com"" in a, which is a user who has logged-in, but not the one I care about.

How do I test for the correct username, while allowing for an if/else statement to be run on the results?

I think the issue is in the comparing to NULL.

Document.evaluate() returns an integer that corresponds to the type of result XPathResult to return. The following values are possible:

ANY_TYPE (0) Whatever type naturally results from the given expression.

NUMBER_TYPE (1) A result set containing a single number. Useful, for example, in an xpath expression using the count() function.

STRING_TYPE (2) A result set containing a single string.

BOOLEAN_TYPE (3) A result set containing a single boolean value. Useful, for example, an xpath expression using the not() function.

UNORDERED_NODE_ITERATOR_TYPE (4) A result set containing all the nodes matching the expression. The nodes in the result set are not necessarily in the same order they appear in the document.

More info is here: https://developer.mozilla.org/en-US/docs/Web/API/Document/evaluate

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM