这里我在Common.java类中创建一个通用方法,用于基于visibleText
选择元素。在另一个类( NewTest.java )中,我调用{{ 1}}。但是当我调试该程序时,它显示
发现错误:
org.openqa.selenium.support.ui.UnexpectedTagNameException:
元素应为“ 选择”,但应为“ 输入”。那么如何从下拉列表中选择员工?
1)Common.java
sellectByVisibleText
1)NewTest.java
public static String selectByVisibletext(String xPath,String inputData, WebDriver driver) {
WebElement webElement = driver.findElement(By.xpath(xPath));
try {
System.out.println(inputData);
System.out.println(xPath);
System.out.println(driver);
Select selectBox = new Select(webElement);
selectBox.selectByVisibleText(inputData);
}
catch (Exception e) {
System.out.println("error found : "+e);
}
return inputData;
}
答案 0 :(得分:1)
如果标签不是“ select”标签,则可以使用类似的方法:
public static String selectByVisibletext(String xPath,String inputData, WebDriver driver) {
WebElement webElement = driver.findElement(By.xpath(xPath));
try {
System.out.println(inputData);
System.out.println(xPath);
System.out.println(driver);
Select selectBox = new Select(webElement);
selectBox.selectByVisibleText(inputData);
}
catch (Exception e) {
if (e.getMessage().contains("UnexpectedTagNameException")) {
List<WebElement> dropDown = driver.findElements(By.xpath(xPath));
dropDown.forEach(dropElement -> {
if (dropElement.getAttribute("innerText").equals(inputData)) {
dropElement.click();
}
});
}
}
return inputData;
}
概念是使用列表中的选择器收集元素,然后找到所需的可选元素的匹配项,然后单击它。
首先单击“ // input [@ class ='select2-search__field']”,然后为所有下拉元素找到一个选择器,然后将其作为WebElement列表获取,并通过匹配文本进行选择。
答案 1 :(得分:0)
Select类仅适用于具有选项字段的SELECT标记。如果没有选项字段,将被拒绝。如果您可以发布HTML,那就太好了。而且,您还将包含INPUT标签的字符串传递到您的方法中。您应该传递实际上包含SELECT标记的XPATH。
很明显,下面的内容(您要传递给方法的内容)是输入字段而非选择字段的XPATH:
String search = "//input[@class='select2-search__field']";
答案 2 :(得分:0)
如果下拉列表不是由 select options HTML tags 组成的,则Selenium select类将无法使用。
在这种情况下,您将必须将所有选项存储在列表中。然后,您可以遍历列表并放置一个条件。就像是。
首先单击下拉菜单。
driver.findElement(By.id("select2-acc_roles-container")).click();
然后将每个选项存储在这样的列表中:
List<WebElement> options = driver.findElements(By.xpath("xpath for all option. This xpath should contain every options"));
for(WebElement option : options) {
if(option.getText().trim().contains("What you want to select from drop down")) {
option.click();
}
}
希望这会有所帮助。