Vivek Rao
Vivek Rao

Reputation: 219

Unable to locate input element under div in Selenium

I am trying to located input element "mpcname" in js file which is under div and table elements.

The code I have written to locate the element is as follows but is not detecting the Input element with the name mpcName in it.

Driver.FindElement(By.XPath(".//input[contains(.,'mpcName')]"));

The HTML code looks like below.

<div enable-tooltips="" class="ng-scope">
<form name="InstanceDetailForm" ng-submit="doApply()" novalidate="" class="ng-pristine ng-invalid ng-invalid-required ng-valid-unnamed ng-valid-maxlength ng-valid-not-integer">
    <table class="table-condensed" style="width: 100%;">
        <tbody><tr>
            <td></td>
        </tr>
        <tr>
            <td>
                <table style="width: 100%;">
                    <tbody><tr>
                        <td class="pull-left">
                            <h4 class="ng-binding">Controller Configuration<b ng-show="InstanceIsDirty()" class="ng-hide">&nbsp;*</b></h4>
                        </td>

                        <td class="pull-right">
                            <button id="btnApply" type="submit" class="btn btn-primary" data-toggle="tooltip" data-placement="bottom" title="Save an APC instance">
                                <span class="glyphicon glyphicon-save"></span>&nbsp;Apply
                            </button>
                            &nbsp;
                            <button id="btnExportConfig" type="button" class="btn btn-primary" ng-click="goToInstanceList()" data-toggle="tooltip" data-placement="bottom" title="Cancel save and redirect to APC instance list page.">
                                <span class="glyphicon glyphicon-remove"></span>&nbsp;Cancel
                            </button>
                        </td>
                    </tr>
                </tbody></table>
            </td>
        </tr>
        <tr>
            <td>
                <table style="width: 100%" class="table-condensed table-striped  table-bordered">
                    <tbody><tr>
                        <td>Name</td>
                        <td>
                            **<input id="mpcname" name="mpcname" ng-model="mpcname" value="" ng-required="true" is-named="" size="50" autocomplete="off" ng-disabled="!allowEditInstanceName(mpcname,state)" class="ng-pristine ng-empty ng-invalid ng-invalid-required ng-valid-unnamed ng-touched" required="required" type="text">**

Upvotes: 1

Views: 711

Answers (2)

Abhishek
Abhishek

Reputation: 41

following code may be helpful

Driver.FindElement(By.XPath(".//input[contains(@id,'mpc')]");

Driver.FindElement(By.XPath(".//input[contains(@class,'ng-pris')]");

Upvotes: 0

Guy
Guy

Reputation: 50809

With xpath ".//input[contains(.,'mpcName')]" you are actually looking for an <input> element with text mpcName. mpcName is actually the id (and name and ng-model) attribute. You can use

Driver.FindElement(By.Id("mpcName"));

Or

Driver.FindElement(By.Name("mpcName"));

Upvotes: 1

Related Questions