Selenium webdriver选择选项

Selenium webdriver选择选项,selenium,select,webdriver,Selenium,Select,Webdriver,我试图使用Selenium/java/MS Edge driver从选择下拉列表中选择一个选项,但我发现我无法选择该选项,即使我可以看到我已经找到了它。 我的代码到目前为止 final static String URL = "http://usedcars.bmw.co.uk"; final static String edgeDriverBinary = "MicrosoftWebDriver.exe"; System.setProperty("webdriver.edge.driver",

我试图使用Selenium/java/MS Edge driver从选择下拉列表中选择一个选项,但我发现我无法选择该选项,即使我可以看到我已经找到了它。 我的代码到目前为止

final static String URL = "http://usedcars.bmw.co.uk";
final static String edgeDriverBinary = "MicrosoftWebDriver.exe";
System.setProperty("webdriver.edge.driver", edgeDriverBinary);
WebDriver driver = new EdgeDriver();
driver.get(URL);

// Click the field to activate the drop down
By byQsRangeBtn = By.xpath("//div[@id='quick-search']/form/fieldset[@class='form']/div/div[@class='js-ctm-dropdownlist']/div[@class='js-ctm-display']/span");
WebElement qsRangeElement = driver.findElement(byQsRangeBtn);            
qsRangeElement.click();
发送此单击会激活下拉列表,我可以看到它会展开

Select qsRange = new Select(driver.findElement(By.id("qsRange")));
log("OPTIONS: " + qsRange.getOptions());
在上面的示例中,我可以dump.getOptions()并查看select选项中的所有数据

当我调用它时,我只得到一个异常,没有堆栈跟踪或有用的日志信息。我尝试了.selectByIndex()和.selectByVisibleText(),结果都是一样的——一个异常,没有任何信息

qsRange.selectByValue("3648835");
这一页的部分在下面。id=“qsRange”在页面中设置为不可见(在firebug中显示为灰色)。class=“js ctm display”是唯一可见的div。 如果我手动单击下拉列表以显示其值,则
将变为
,但firebug仍将选择视为未显示

<form class="quicksearch mp-search-count" method="post" action="/search-cars.aspx">
<fieldset class="form">
<div class="search-control series js-ctm js-ctm-mode-full" data-theme-type="dropdownlist">
<div class="js-ctm-dropdownlist">
<select id="qsRange" class="mp-control-data" name="Range">
<option value="-1">Series</option>
<option value="890">1 Series</option>
<option value="3648873">2 Series</option>
<option value="66">3 Series</option>
<option value="3648835">4 Series</option>
<option value="67">5 Series</option>
<option value="68">6 Series</option>
<option value="69">7 Series</option>
<option value="3648830">X</option>
<option value="3648831">Z</option>
<option value="3648832">M</option>
<option value="3648938">PHEV</option>
<option value="3648833">Hybrid</option>
<option value="3648834">BMW i</option>
<option value="3648879">Alpina</option>
</select>

<div class="js-ctm-display">
<span>Series</span>
<span class="js-ctm-ico"></span>
</div>

系列
1系列
2系列
3系列
4系列
5系列
6系列
7系列
X
Z
M
PHEV
混合的
宝马一号
阿尔皮纳
系列
如果我从下拉列表中手动选择一个值,我会看到class=“js ctm display”如下所示,然后页面会进行ajax调用以获取后续下拉列表的值

<div class="js-ctm-display">
<span>4 Series</span>
<span class="js-ctm-ico"></span>
</div>

4系列
因为我可以看出,当我浏览这些选项时,页面正在进行多个ajax调用,我认为我需要模拟用户交互(单击),而不仅仅是设置值。然而,我试图点击列表中的一个选项却完全没有效果

我还尝试为其中一个选项值获取一个WebElement,目的是向它发送一个单击,但这会引发一个异常,表示WebElement应该是一个选择而不是一个选项

有人对如何访问此类页面有看法吗?我对Selenium比较陌生,所以我认为我的方法不是最好的