Selenium webdriver选择选项

时间:2016-11-01 23:17:29

标签: selenium select webdriver

我正在尝试使用Selenium / java / MS Edge驱动程序从选择下拉列表中选择一个选项,但我发现我无法选择该选项,即使我可以看到我找到了它。 我的代码到目前为止;

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());

在上面我可以转储.getOptions(),然后我会看到select选项中的所有数据。

当我调用它时,我得到一个没有堆栈跟踪或有用的日志记录信息的异常。我尝试过.selectByIndex()和.selectByVisibleText(),结果相同 - 一个异常,没有信息。

qsRange.selectByValue("3648835");

页面的部分如下。 id =“qsRange”设置为在页面中不可见(在firebug中显示为灰色)。 class =“js-ctm-display”是唯一可见的div。 如果我手动点击下拉列表以显示其值,则<div class="js-ctm-dropdownlist">会变为<div class="js-ctm-dropdownlist js-open">,但是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>

如果我从下拉列表中手动选择一个值,那么我看到class =“js-ctm-display”变为如下所示,然后页面进行ajax调用以获取后续下拉列表的值。

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

因为当我浏览选项时,我可以告诉该页面正在进行多个ajax调用,我相信我需要模拟用户交互(点击),而不是只能设置值。但是,我单击列表中某个选项的尝试根本无法解决。

我还试图为其中一个选项值获取一个WebElement,意图发送一个单击,但是会抛出一个异常,说WebElement应该是Select而不是Option。

有没有人对如何处理这种页面有所了解?我对Selenium很新,所以期待我的方法不是最好的。

0 个答案:

没有答案