我在Visual Studio Community 2017中使用C#,Selenium.Firefox.Webdriver v0.16.1,Selenium.WebDriver v3.4.0。
我从一系列下拉列表中提取文本,并且这样做需要在表示索引的int中添加1,因为选择一个下拉列表会根据所选模型填充具有不同内容的下一个下拉列表。
我已经提取了所有值并存储在列表中,删除了“请选择”的第一个值。
我用过:
selectModel.SelectByIndex(ModelIndex+1);
但间歇性地获取OpenQA.Selenium.NoSuchElementException:'无法在第二个下拉列表中找到带索引的选项:1'并始终在第三个下拉列表中。
如果我替换为:
selectModel.SelectByIndex(1);
我编写的代码工作正常,但我想在索引中增加直到它耗尽。
我正在递增和递减索引值,但我不认为这是最好的做事方式:
var modelDropDown = driver.FindElement(By.Name("Model"));
var selectModel = new SelectElement(modelDropDown);
ModelIndex++;
selectModel.SelectByIndex(ModelIndex);
ModelIndex--;
第二个下拉列表的HTML示例:
<select name="Model" id="Model-select" class="form-control asset-option-select ng-pristine ng-not-empty ng-valid ng-valid-required ng-touched" required="" ng-options="option.label for option in dropdown.options track by option.value" ng-model="dropdown.selected" ng-change="select_option(dropdown)" ng-disabled="model.is_locked || dropdown.options.length === 0">
<option value="" selected="selected" disabled="disabled" class="" hidden="">Please Select</option>
<option label="Cherokee" value="Cherokee">Cherokee</option>
<option label="Grand Cherokee" value="Grand Cherokee">Grand Cherokee</option>
<option label="Renegade" value="Renegade">Renegade</option>
<option label="Wrangler" value="Wrangler">Wrangler</option>
<option label="Pre-current Cherokee" value="Pre-current Cherokee">Pre-current Cherokee</option>
</select>
也许我会以错误的方式处理整个事情,但这就是我在这里问的原因,我主要是想知道为什么我会收到错误:
SelectByIndex(ModelIndex+1)
答案 0 :(得分:0)
现在我感到很尴尬,就像在下载内容之前加载下拉内容一样简单。
这就是为什么没有索引为1,因为下拉列表只包含一个占位符,直到内容加载为止。
Thread.Sleep(500);
足以证明这一点,理想情况下,它应该在获取内容之前等待内容加载,而不是仅使用Thread.Sleep,但现在它说明了为什么会出现此问题。