在这里,我试图使用Selenium脚本从下拉列表中选择一个值,但在控制台中却出现了此错误,例如
“线程“主”中的异常” org.openqa.selenium.support.ui.UnexpectedTagNameException:元素应已被“选择”,但已被“跨度”。
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>
下拉菜单中有多个值,我需要在其中选择一个值。
答案 0 :(得分:3)
错误显示您正在使用<span>
标签而不是Select
。
您要查找的Select
元素是//*[@id="signup-username"]
。
此外,您应该使用WebDriverWait
等待定位符:
WebDriverWait wait = new WebDriverWait(webDriver, timeoutInSeconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id<locator>));
您应该看着ExpectedConditions
等待...
希望这对您有帮助!
答案 1 :(得分:-1)
@MosheSlavin的分析和回答是正确的方向。
此错误消息...
"Exception in thread "main" org.openqa.selenium.support.ui.UnexpectedTagNameException: Element should have been "select" but was "span"
...表示您已使用Select
类与所需元素进行交互,因为该元素是<span>
。
要选择一个值,例如使用Selenium从下拉菜单中的用户名,您可以使用以下解决方案:
代码块:
driver.get("https://ecabportal.azurewebsites.net/dashboard");
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.name("email"))).sendKeys("admin@malbork.in");
driver.findElement(By.name("password")).sendKeys("NsSaNj@0205");
driver.findElement(By.name("signIn")).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//h1[contains(., 'Dashboard')]")));
driver.get("https://ecabportal.azurewebsites.net/user");
new WebDriverWait(driver, 20).until(ExpectedConditions.invisibilityOfElementLocated(By.xpath("//div[@id='load']")));
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("span.select2-selection.select2-selection--single>span.select2-selection__rendered"))).click();
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[@class='select2-results']//li[contains(., 'User Name')]"))).click();
浏览器快照:
注意:
elementToBeClickable()
方法之前,click()
引发 WebDriverWait 。 invisibilityOfElementLocated()
引入 WebDriverWait 的覆盖,然后调用所需的click()
。