我正在尝试从下拉列表中选择值,但是获取错误元素应该是“select”但是“mat-select”。我正在测试angularjs应用程序,我能够成功选择下拉..但是当我尝试在下拉列表中选择值时,我会出现错误。
以下是我用来从下拉列表中选择元素的方法:
public ActionResult CitySelectList(int? stateId)
{
LocationCreateViewModel locationCreateViewModel = new LocationCreateViewModel();
locationCreateViewModel.CitySelectListViewModel = new CitySelectListViewModel(db.Cities.Where(c => c.StateId == stateId).ToList());
return View(locationCreateViewModel);
}
错误日志:
public void clickandselectstoregroup(){
WebElement storegroupIDdropdown = WebDriverUtils.getWebDriver().findElement(By.id(matselectStoreGroup));
Select se = new Select(storegroupIDdropdown);
se.selectByIndex(1);
}
答案 0 :(得分:0)
看起来AngularJS没有select
元素。它有另一个东西,WebDriver不能使用你的web元素,比如Select。
我没有测试过AngularJS。
但是,在这种情况下,我可以建议一个解决方案,只使用原生点击。您需要单击替换选择功能:
代码段应该类似于:
DriverUtils.getWaiter().until(ExpectedConditions.elementToBeClickable(By.id("vchannel_combobox"))).click();
DriverUtils.getWaiter().until(ExpectedConditions.elementToBeClickable(By.xpath(
String.format("//Rectangle[@id='vchannel_drop_down']/ListView/Item/Item[%d]", RandomUtils.nextInt(1, 4))))
).click();
在下面的示例中,您可以看到两个恰当的操作。在这种情况下,选择哪个元素无关紧要
为了从列表Xpath
中选择正确的元素,使用了定位器。
答案 1 :(得分:0)
错误说明了一切:
Element should have been "select" but was "mat-select"
很明显WebElement
storegroupIDdropdown
已被确定为:
WebDriverUtils.getWebDriver().findElement(By.id(matselectStoreGroup));
此WebElement
未在任何 <select>.....</select>
标记中定义。而是在 <mat-select>.....</mat-select>
标记内定义。
因此,当您尝试调用 selectByIndex(n)
方法(仅可由 Select
类型对象调用)时,向前移动当前对象无法调用该方法。因此,您会看到错误。
如果您仔细查看 HTML DOM
,您会找到 <select>.....</select>
标记或 {{1} 标记,用于控制 <ul>..<li>...</li>..</ul>
。您需要识别它们并与它们一起使用。