如何使用 Selenium 在组合框上键入
How to type on combo box using Selenium
我在尝试使用 selenium 在组合框上键入时遇到困难。实际上组合框使用 javascript 和 ajax 来加载数据。当用户单击按钮 dropdown 时,组合框将加载数据。实际上我遇到了困难,因为我不能使用函数 selectByValue()
或 selectByVisibleText()
。这是代码:
<table id="isc_U5" class="OBFormFieldSelectControl" cellspacing="0" cellpadding="0" style="cursor:default;WIDTH:307px;" a="f" ="isc_OBFKComboItem_8" role="presentation">
<tbody>
<tr>
<td style="white-space:nowrap;">
<input id="isc_U3" class="OBFormFieldSelectInputRequired" type="TEXT" tabindex="4078" style="WIDTH:281px;HEIGHT:17px;-moz-user-focus:normal;" autocomplete="OFF" onselect="isc_OBFKComboItem_8.62()" oninput="isc_OBFKComboItem_8._handleInput()" spellcheck="true" a="b" ="isc_OBFKComboItem_8" handlenativeevents="false" name="transactionDocument"/>
</td>
<td id="isc_U7" class="OBFormFieldSelectPickerIcon" style="font-size:21px;">
</tr>
</tbody>
</table>
请尝试以下 c# 代码。
IWebElement comboBoxElement = driver.FindElement(By.Id("OBFormFieldSelectInputRequired"));
选项 1
使用 SendKeys 直接发送 ComboBox 值,因为它只是一个输入元素。
comboBoxElement.SendKeys("ComboBox value to select");
选项 2
输入您要查找的值的前几个字符 select
comboBoxElement.SendKeys("TE");
这将使您的应用程序显示 LI 值以 TE 开头的 UL 和 LI 标记。现在找到 UL 元素并找到其子 LI 元素。遍历每个 LI 元素并在迭代期间找到所需值时执行 .click。
试试下面的代码。我用过JAVA
使用普通的SendKeys:
driver.findElement(By.cssSelector("input.OBFormFieldSelectInputRequired").sendKeys("Beginning letters of the word you want");
使用findElements
:
List<WebElement> elements = driver.findElements(By.cssSelector("list items cssSelector"));
for (WebElement element : elements) {
if (element.getText().equalsIgnoreCase("Enter the text you want")) {
element.click();
break;
}
}
或使用Java Robot
:
List<WebElement> elements = driver.findElements(By.cssSelector("list items cssSelector"));
Robot bot = new Robot();
bot.setAutoDelay(1);
for (WebElement element : elements) {
bot.keyPress(KeyEvent.VK_DOWN);
bot.keyRelease(KeyEvent.VK_DOWN);
if (element.getText().equalsIgnoreCase("Enter the text you want")) {
bot.keyPress(KeyEvent.VK_ENTER);
bot.keyRelease(KeyEvent.VK_ENTER);
break;
}
}
我在尝试使用 selenium 在组合框上键入时遇到困难。实际上组合框使用 javascript 和 ajax 来加载数据。当用户单击按钮 dropdown 时,组合框将加载数据。实际上我遇到了困难,因为我不能使用函数 selectByValue()
或 selectByVisibleText()
。这是代码:
<table id="isc_U5" class="OBFormFieldSelectControl" cellspacing="0" cellpadding="0" style="cursor:default;WIDTH:307px;" a="f" ="isc_OBFKComboItem_8" role="presentation">
<tbody>
<tr>
<td style="white-space:nowrap;">
<input id="isc_U3" class="OBFormFieldSelectInputRequired" type="TEXT" tabindex="4078" style="WIDTH:281px;HEIGHT:17px;-moz-user-focus:normal;" autocomplete="OFF" onselect="isc_OBFKComboItem_8.62()" oninput="isc_OBFKComboItem_8._handleInput()" spellcheck="true" a="b" ="isc_OBFKComboItem_8" handlenativeevents="false" name="transactionDocument"/>
</td>
<td id="isc_U7" class="OBFormFieldSelectPickerIcon" style="font-size:21px;">
</tr>
</tbody>
</table>
请尝试以下 c# 代码。
IWebElement comboBoxElement = driver.FindElement(By.Id("OBFormFieldSelectInputRequired"));
选项 1 使用 SendKeys 直接发送 ComboBox 值,因为它只是一个输入元素。
comboBoxElement.SendKeys("ComboBox value to select");
选项 2 输入您要查找的值的前几个字符 select
comboBoxElement.SendKeys("TE");
这将使您的应用程序显示 LI 值以 TE 开头的 UL 和 LI 标记。现在找到 UL 元素并找到其子 LI 元素。遍历每个 LI 元素并在迭代期间找到所需值时执行 .click。
试试下面的代码。我用过JAVA
使用普通的SendKeys:
driver.findElement(By.cssSelector("input.OBFormFieldSelectInputRequired").sendKeys("Beginning letters of the word you want");
使用
findElements
:List<WebElement> elements = driver.findElements(By.cssSelector("list items cssSelector")); for (WebElement element : elements) { if (element.getText().equalsIgnoreCase("Enter the text you want")) { element.click(); break; } }
或使用
Java Robot
:List<WebElement> elements = driver.findElements(By.cssSelector("list items cssSelector")); Robot bot = new Robot(); bot.setAutoDelay(1); for (WebElement element : elements) { bot.keyPress(KeyEvent.VK_DOWN); bot.keyRelease(KeyEvent.VK_DOWN); if (element.getText().equalsIgnoreCase("Enter the text you want")) { bot.keyPress(KeyEvent.VK_ENTER); bot.keyRelease(KeyEvent.VK_ENTER); break; } }