首页 > 解决方案 > 从下拉列表中选择时,Selenium C# 对象不在视图中

问题描述

我正在尝试从下拉列表中选择一个值,但是当我尝试选择它时,我收到了对象不在视图中的错误。同一页面上的所有其他字段都可以很好地填写,它只是给我带来问题的下拉菜单。

代码:

driver.FindElementById("amount").SendKeys(amount);
            var element = driver.FindElementById("dial-code");

            element.SendKeys(Keys.Backspace + Keys.Backspace + cc);

            driver.FindElementById("displayed-phone").SendKeys(number);
            driver.FindElementById("message").SendKeys("Payment for " + code);
            driver.FindElementById("currency").Click();

货币是下拉列表的 id。

HTML:

<select id="currency" class="form-select form-medium" name="currency" rel="tooltip" title="" data-original-title="Select currency" aria-invalid="false">
                                        <option data-min="0.1" data-max="2000" data-precision="2" value="EUR">
                            EUR</option>
                                        <option data-min="0.11" data-max="2267.9" data-precision="2" value="USD">
                            USD</option>
                                        <option data-min="0.43" data-max="8586.52" data-precision="2" value="PLN">
                            PLN</option>
                                        <option data-min="4.26" data-max="85191.21" data-precision="2" value="ARS">
                            ARS</option>
                                        <option data-min="0.09" data-max="1769.03" data-precision="2" value="GBP">
                            GBP</option>
                                        <option data-min="0.15" data-max="3001.83" data-precision="2" value="CAD">
                            CAD</option>
                                        <option data-min="0.47" data-max="9321.04" data-precision="2" value="RON">
                            RON</option>
                                        <option data-min="0.16" data-max="3135.05" data-precision="2" value="AUD">
                            AUD</option>
                                        <option data-min="2.59" data-max="51860.98" data-precision="2" value="CZK">
                            CZK</option>
                                        <option data-min="129" data-max="2571679" data-precision="0" value="KRW">
                            KRW</option>
                                        <option data-min="77" data-max="1530190" data-precision="0" value="CLP">
                            CLP</option>
                                        <option data-min="13" data-max="256158" data-precision="0" value="JPY">
                            JPY</option>
                                        <option data-min="0.43" data-max="8684.11" data-precision="2" value="BRL">
                            BRL</option>
                                        <option data-min="0.6" data-max="11991.5" data-precision="2" value="TRY">
                            TRY</option>
                                        <option data-min="8.01" data-max="160286.6" data-precision="2" value="INR">
                            INR</option>
                                        <option data-min="7.51" data-max="150163" data-precision="2" value="RUB">
                            RUB</option>
                                        <option data-min="32.26" data-max="645136.78" data-precision="2" value="HUF">
                            HUF</option>
                                        <option data-min="0.17" data-max="3342.54" data-precision="2" value="NZD">
                            NZD</option>
                                        <option data-min="0.79" data-max="15758.7" data-precision="2" value="CNY">
                            CNY</option>
                                        <option data-min="0.11" data-max="2262.06" data-precision="2" value="CHF">
                            CHF</option>
                                        <option data-min="3.75" data-max="75023.1" data-precision="2" value="THB">
                            THB</option>
                                        <option data-min="2.31" data-max="46292.05" data-precision="2" value="MXN">
                            MXN</option>
                                        <option data-min="1.03" data-max="20619.2" data-precision="2" value="SEK">
                            SEK</option>
                                        <option data-min="0.75" data-max="14927.74" data-precision="2" value="DKK">
                            DKK</option>
                                        <option data-min="361.82" data-max="7236419.13" data-precision="2" value="COP">
                            COP</option>
                                        <option data-min="0.97" data-max="19492.9" data-precision="2" value="NOK">
                            NOK</option>
                                        <option data-min="0.43" data-max="8509.14" data-precision="2" value="SAR">
                            SAR</option>
                                        <option data-min="2638" data-max="52752181" data-precision="0" value="VND">
                            VND</option>
                                        <option data-min="0.16" data-max="3119.04" data-precision="2" value="SGD">
                            SGD</option>
                                        <option data-min="3.51" data-max="70182.28" data-precision="2" value="TWD">
                            TWD</option>
                                        <option data-min="0.42" data-max="8330.02" data-precision="2" value="AED">
                            AED</option>
                                        <option data-min="1.57" data-max="31426.7" data-precision="2" value="ZAR">
                            ZAR</option>
                                        <option data-min="5.94" data-max="118835.44" data-precision="2" value="PHP">
                            PHP</option>
                                        <option data-min="0.38" data-max="7658.68" data-precision="2" value="PEN">
                            PEN</option>
                                        <option data-min="2.03" data-max="40577.18" data-precision="2" value="EGP">
                            EGP</option>
                                        <option data-min="0.89" data-max="17747.98" data-precision="2" value="HKD">
                            HKD</option>
                                        <option data-min="0.03" data-max="689.81" data-precision="3" value="KWD">
                            KWD</option>
                                        <option data-min="0.08" data-max="1609.09" data-precision="3" value="JOD">
                            JOD</option>
                                        <option data-min="0.11" data-max="2267.9" data-precision="2" value="PAB">
                            PAB</option>
                                        <option data-min="0.48" data-max="9519.37" data-precision="2" value="MYR">
                            MYR</option>
                                </select><button class="select-button form-medium valid" type="button"><span>
                            USD</span><svg class="icon icon-arrow_down-dims"><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon-arrow_down"></use></svg></button><div class="options"><div class="option" data-value="EUR">
                            EUR</div><div class="option selected" data-value="USD">
                            USD</div><div class="option" data-value="PLN">
                            PLN</div><div class="option" data-value="ARS">
                            ARS</div><div class="option" data-value="GBP">
                            GBP</div><div class="option" data-value="CAD">
                            CAD</div><div class="option" data-value="RON">
                            RON</div><div class="option" data-value="AUD">
                            AUD</div><div class="option" data-value="CZK">
                            CZK</div><div class="option" data-value="KRW">
                            KRW</div><div class="option" data-value="CLP">
                            CLP</div><div class="option" data-value="JPY">
                            JPY</div><div class="option" data-value="BRL">
                            BRL</div><div class="option" data-value="TRY">
                            TRY</div><div class="option" data-value="INR">
                            INR</div><div class="option" data-value="RUB">
                            RUB</div><div class="option" data-value="HUF">
                            HUF</div><div class="option" data-value="NZD">
                            NZD</div><div class="option" data-value="CNY">
                            CNY</div><div class="option" data-value="CHF">
                            CHF</div><div class="option" data-value="THB">
                            THB</div><div class="option" data-value="MXN">
                            MXN</div><div class="option" data-value="SEK">
                            SEK</div><div class="option" data-value="DKK">
                            DKK</div><div class="option" data-value="COP">
                            COP</div><div class="option" data-value="NOK">
                            NOK</div><div class="option" data-value="SAR">
                            SAR</div><div class="option" data-value="VND">
                            VND</div><div class="option" data-value="SGD">
                            SGD</div><div class="option" data-value="TWD">
                            TWD</div><div class="option" data-value="AED">
                            AED</div><div class="option" data-value="ZAR">
                            ZAR</div><div class="option" data-value="PHP">
                            PHP</div><div class="option" data-value="PEN">
                            PEN</div><div class="option" data-value="EGP">
                            EGP</div><div class="option" data-value="HKD">
                            HKD</div><div class="option" data-value="KWD">
                            KWD</div><div class="option" data-value="JOD">
                            JOD</div><div class="option" data-value="PAB">
                            PAB</div><div class="option" data-value="MYR">
                            MYR</div></div></div>
            </div>
        </div>
        <div class="form-group">
            <label for="phone">Request money from</label>
            <div class="form-control-input">
                <div id="phone" class="input-group input-group-medium input-group-phone small-group">
                    <div class="input-group-addon flag">
                        <img class="flag-icon" src="/img/flags/svg/NL.svg">
                    </div>
                    <input type="text" name="dialCode" id="dial-code" value="31" class="form-control input-group-code dirty valid" autocomplete="off" maxlength="4">
                    <input type="tel" name="phoneNumber" id="displayed-phone" class="form-control input-group-number error" placeholder="Type phone number" autocomplete="off" maxlength="16" aria-describedby="displayed-phone-error">
                </div>
            </div>
        <div id="displayed-phone-error" class="error form-control-error">Phone number is required.</div></div>

        <div class="form-group">
            <label for="message">Message</label>
            <div class="form-control-input">
                <textarea id="message" name="message" class="form-control form-medium error" aria-describedby="message-error" aria-invalid="true"></textarea>
            </div>
        <div id="message-error" class="error form-control-error">Message is required.</div></div>

        <input type="hidden" class="csrf" name="L1T9b7fT5g14JGEc" value="74bdb290ff621f31c284b88e26e380a9">


        <div class="form-group">
            <button type="submit" class="btn btn-primary">Send request</button>
        </div>
    </form>

我已经尝试使用一个动作向下滚动,但问题似乎是下拉菜单很长。这会导致问题,因为我无法再从下拉列表中进行选择。

还尝试使用 Javascript 更改下拉列表的值,但这也不起作用:

  driver.ExecuteScript("document.getElementById('currency').value = 'USD';");

标签: c#selenium

解决方案


Selenium 具有使用下拉菜单的功能。像这样:

var dropdown = driver.FindElementById("dial-code");     
var selectElement = new SelectElement(dropdown);
//select by value
selectElement.SelectByValue("Jr.High"); 
// select by text
selectElement.SelectByText("HighSchool");

或更短:

(new SelectElement(driver.FindElement(By.XPath(""))).SelectByValue("");

这适用于通常的下拉菜单。为此,您将需要Selenium.Support nuget 包。


推荐阅读