Java 单击selenium中自动建议下拉列表中的值

Java 单击selenium中自动建议下拉列表中的值,java,selenium,Java,Selenium,我正在使用java开发selenium中的测试自动化。我的疑问是我正在使用发送键发送自动建议下拉列表的值 locater.sendKeys(“某些值”) 因此,当我使用 定位器。发送键(键。箭头向下) locater.sendKeys(Keys.Enter) 它总是选择最后一个选项。 如何单击我正在发送的选项?您的代码不应选择最后一个选项。应选择第一个选项 如果您想特别选择您提供的选项,则可以使用以下代码: locator.sendKeys("test match"); Thre

我正在使用java开发selenium中的测试自动化。我的疑问是我正在使用发送键发送自动建议下拉列表的值
locater.sendKeys(“某些值”)
因此,当我使用
定位器。发送键(键。箭头向下)
locater.sendKeys(Keys.Enter)
它总是选择最后一个选项。
如何单击我正在发送的选项?

您的代码不应选择最后一个选项。应选择第一个选项

如果您想特别选择您提供的选项,则可以使用以下代码:

    locator.sendKeys("test match");
    Thread.sleep(1000);
    WebElement element_move = driver.findElement(By.xpath("//*[. = 'test match']"));
    Actions actions = new Actions(driver);
    actions.moveToElement(element_move).click().build().perform();
由于选择是,下面的功能将为您工作

在您的情况下,id是32

所以你可以这样称呼它

reactSelect("32", "Male"); // reactSelect("32", "male");
作用

public void reactSelect(String id, String... values) {
    By selectDropArrow = By.xpath("//div[@class='Select-control'][span[contains(@id,'react-select-" + id + "')]]/span[@class='Select-arrow-zone']");
    WebElement dropDownArrow = driver.findElement(selectDropArrow);
    dropDownArrow.click();
    if (values != null) {
        for (String value : values) {
            WebElement option = driver.findElement(By.xpath("//div[@id='react-select-" + id + "--list']/div[@class='Select-option' and text()='" + value + "']"));
            option.click();
        }
    }
}
完整示例

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 *
 * @author Madhanraj
 */
public class SelTest {

    WebDriver driver;

    public SelTest() {
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }

    public void start() {
        driver.get("http://jedwatson.github.io/react-select/");
        reactSelect("3", "Caramel", "Peppermint");
    }

    public void reactSelect(String id, String... values) {
        By selectDropArrow = By.xpath("//div[@class='Select-control'][span[contains(@id,'react-select-" + id + "')]]/span[@class='Select-arrow-zone']");
        WebElement dropDownArrow = driver.findElement(selectDropArrow);
        dropDownArrow.click();
        if (values != null) {
            for (String value : values) {
                WebElement option = driver.findElement(By.xpath("//div[@id='react-select-" + id + "--list']/div[@class='Select-option' and text()='" + value + "']"));
                option.click();
            }
        }
    }

    public void quit() {
        driver.quit();
    }

    public static void main(String[] args) {
        SelTest ss = new SelTest();
        ss.start();
        ss.quit();
    }

}

您可以尝试只按enter键而不按向下箭头。如果html标记为,则可以使用
new Select(元素)。selectByValue(“value”)不,它不是一个选择标签,而是一个自动建议下拉菜单,就像谷歌搜索一样。我尝试了上面的代码,但没有得到想要的结果,它没有点击任何元素。确切地说,我想选择性别为“男性”,所以当我发送locator.sendKeys(“男性”)时;两个建议依次显示为男性和女性,因此当我使用locater.sendKeys(key.ARROW_DOWN)时;总是选择女性。如果省略locater.sendKeys(key.ARROW_DOWN);并且只使用locater.sendKeys(key.Enter),选择男性才有效。但是如果我的字符串位于第二位左右,这也会失败。你能给我元素的HTML吗。它将帮助我修复您的代码选择性别我可以看到“反应选择”用于创建下拉列表。在使用react-select创建的下拉列表中给出元素的路径并不是那么简单。react-select生成一个隐藏的文本字段,精确地包含所选的值,这就是问题所在。当我选择性别时,只有这些元素显示,否则不会显示。如何解决这类问题?有什么想法吗?