c# - 从下拉列表中选择时,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';");
解决方案
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 包。
推荐阅读
- python - Tkinter GUI 未显示,但功能收到响应
- pandas - 从 hdf 文件生成热图
- batch-file - 在嵌套的 for 循环中执行 WMIC 命令
- sql - 我想在 PostgreSQL 500 K 行中随机插入数据?
- postgresql - postgresql-client-13 :取决于:libpq5 (>= 13~beta2) 但要安装 12.3-1.pgdg18.04+1
- android - 如何更新共享偏好?
- java - POST 请求的主体应该如何构造子资源创建?
- api - 在颤振上向我的 API 发送数据时出现错误 400
- javascript - dompdf - 如何在 chrome 浏览器中自动触发打印对话框
- javascript - 如何用vue制作对象数组?