无法从selenium webdriver的下拉列表中选择项目

时间:2017-02-27 13:12:39

标签: selenium dropdown

我正在尝试从下拉列表中选择一个项目,因为在html标记中没有用作选择下拉列表,然后我习惯通过操作选择下拉项。

我的问题是在这种情况下选择下拉项目的代码的标准方法,或者我应该更改我的代码。

    import org.openqa.selenium.By;
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.interactions.Actions;
    import org.openqa.selenium.support.ui.Select;

    public class test 
    {
    static WebDriver driver;
    public static void main(String[] args) 
    {
        System.setProperty("webdriver.chrome.driver", "D:\\rakesh\\software\\selenium browser\\New folder\\chromedriver.exe");
        driver=new ChromeDriver();
        driver.get("https://app.crossover.com/x/marketplace/available-jobs");
        driver.manage().window().maximize();
        driver.findElement(By.cssSelector(".btn.btn-default.form-control.ui-select-toggle")).click();

        WebElement dropdonw_ele = driver.findElement(By.xpath("/html/body/div[2]/div[3]/div/div/div/div[2]/form/div/div[2]/job-label-select/div/ul/li/div[5]/span/div/span"));
        Actions act = new Actions(driver);
        act.build();
        act.moveToElement(dropdonw_ele).click();
        act.perform();
    }
}

3 个答案:

答案 0 :(得分:0)

如果您的下拉列表是本机html下拉列表,请查看org.openqa.selenium.support.ui.Select类。

//simplify this xpath expression?
WebElement dropdonw_ele = driver.findElement(By.xpath("/html/body/div[2]/div[3]/div/div/div/div[2]/form/div/div[2]/job-label-select/div/ul/li/div[5]/span/div/span"));
Select dropDown = new Select(dropdonw_ele);
dropDown.selectByValue("your item value");

如果它不是本机html标记,您可以使用操作,也可以直接单击值框而不使用操作。如果这不起作用,因为下拉值元素不可见,您可以使用JavaScript单击它。

private void clickWithJavaScript(WebElement target) {
        JavascriptExecutor executor = (JavascriptExecutor) driver;
        executor.executeScript("arguments[0].click()", target);
}  

答案 1 :(得分:0)

嗨Rocky您可能不需要使用动作类。 以下是您可以尝试的可行代码,并告诉我们。

public class test 
{
static WebDriver driver;
public static void main(String[] args) 
   {
    System.setProperty("webdriver.chrome.driver", "D:\\rakesh\\software\\selenium browser\\New folder\\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.manage().window().maximize();    
    driver.get("https://app.crossover.com/x/marketplace/available-jobs");
    Thread.sleep(3000L);
    driver.findElement(By.xpath(".//*[@ng-click='$select.toggle($event)']")).click();
    Thread.sleep(3000L);
    driver.findElement(By.xpath(".//*[contains(text(),'iOS and Android')]")).click();
    Thread.sleep(3000L);
   }
}

请尝试一下。 快乐学习: - )

答案 2 :(得分:0)

试试这种方式。
注意:使用Relative xpath,而不是absolute xpath

driver.get("https://app.crossover.com/x/marketplace/available-jobs");
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.findElement(By.xpath("//span[@class='ui-select-match-text pull-left']/span")).click();            //click on All job categories first
Thread.sleep(3500);
driver.findElement(By.xpath("//div[@class='ng-scope']/span[contains(text(), 'C++')]")).click();     //By using xpath method click on C++ from the dropdown selection.
Thread.sleep(3500);