Selenium选择隐藏下拉菜单

时间:2013-07-01 21:39:56

标签: java xpath selenium webdriver css-selectors

大家下午好,

所以我的问题是我正在尝试选择隐藏的下拉菜单中的字段。下面是其中一个下拉菜单的HTML代码。

<div id="mainForm:defectPriorityField" class="ui-selectonemenu ui-widget ui-state-default ui-corner-all ui-helper-clearfix" style="width:120px">
<div class="ui-helper-hidden">
<select id="mainForm:defectPriorityField_input" name="mainForm:defectPriorityField_input">
<option value="1-Urgent">1-Urgent</option>
<option value="2-Very High">2-Very High</option>
<option value="3-High">3-High</option>
<option value="4-Medium">4-Medium</option>
<option value="5-Low">5-Low</option>
</select>

现在我已经读过有几种方法可以做到这一点。下面似乎是最受欢迎的。

String cssSelector= ...
JavascriptExecutor js = (JavascriptExecutor) driver;
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("var x = $(\'"+cssSelector+"\');");
    stringBuilder.append("x.click();");
    js.executeScript(stringBuilder.toString());

下拉菜单的xpath是// * [@ id =“mainForm:defectPriorityField_input”] 我对此比较陌生,不确定如何生成或获取cssSelector。如果有人能指出我正确的方向,我们将不胜感激。

2 个答案:

答案 0 :(得分:0)

这是我采取的方法,首先点击下拉菜单,然后选择一个选项:

WebElement dropdown = driver.findElement(By.xpath("//div[@id=\"mainForm:defectPriorityField\"]);
dropdown.click();

WebDriverWait waitForOptions = new WebDriverWait(driver, 3);
waitForOptions.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@id=\"mainForm:defectPriorityField_input\"]")));

WebElement option = driver.findElement(By.xpath("//div[@id=\"mainForm:defectPriorityField_input\"]/option[text()=\"1-Urgent\"]"));
option.click();

请原谅任何语法错误,但这基本上就是这个想法。在选项元素的最后一个语句中,您可以将文本“1-Urgent”替换为变量或您喜欢的任何内容。

答案 1 :(得分:0)

如果元素是隐藏的,则不应使用它。因为用户也不会。

如果不是,那么为什么不使用SelectElement?

    SelectElement sel = new SelectElement(driver.FindElement(By.Id("Id")));
    sel.SelectByValue("Value");