无法使用selenium webdriver找到下拉列表值

时间:2015-06-18 13:12:29

标签: java selenium selenium-webdriver

我想从下拉列表中选择值。

目前,我可以点击下拉列表但无法从下拉列表中选择值。以下是我用于从下拉列表中选择值的代码。

                temp.click();
                driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
                Select clickThis = new Select(temp); 
                try{

                    Thread.sleep(5000);
                    clickThis.selectByValue("India");

                }catch(Exception e){
                    e.printStackTrace();
                    System.out.println("<><><><><>Not Found<><><><><><>");
                }

我在框架中工作,请你告诉我相应的代码。请检查我正在使用的以下代码。

private boolean operateWebDriver(String operation, String Locator,
            String value, String objectName) throws Exception {
        boolean testCaseStep = false;

        try {
            System.out.println("Operation execution in progress");
            WebElement temp = getElement(Locator, objectName);
            if (operation.equalsIgnoreCase("SendKey")) {
                temp.sendKeys(value);
            }
            Thread.sleep(1000);
            driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
            if (operation.equalsIgnoreCase("Click")) {
                temp.click();
            }
            if (operation.equalsIgnoreCase("Verify")) {
                System.out.println("Verify--->" + temp);
                temp.isDisplayed();

            }
            if (operation.equalsIgnoreCase("clickDropdown")) {

                temp.click();
                driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
                Select clickThis = new Select(temp); 
                try{

                    Thread.sleep(5000);
                    clickThis.selectByValue("India");

                }catch(Exception e){
                    e.printStackTrace();
                    System.out.println("<><><><><>Not Found<><><><><><>");
                }
               }

            testCaseStep = true;

        } catch (Exception e) {
            System.out.println("Exception occurred operateWebDriver"
                    + e.getMessage());

            // Take screenshot if any testcase is not working. 
            System.out.println("Taking Screen Shot");
            File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(scrFile, new File("E:\\workspace for selenium\\Simple page creator\\Snapshot\\screenshot.jpeg")); 
        }

        return testCaseStep;
    }

    public WebElement getElement(String locator, String objectName)
            throws Exception {
        WebElement temp = null;

        System.out.println("Locator-->" + locator);
        if (locator.equalsIgnoreCase("id")) {
            temp = driver.findElement(By.id(objectName));

        } else if (locator.equalsIgnoreCase("xpath")) {
            temp = driver.findElement(By.xpath(objectName));
            System.out.println("xpath temp ----->" + temp);
        } else if (locator.equalsIgnoreCase("name")) {
            temp = driver.findElement(By.name(objectName));
        }
        return temp;

    }

}

HTML

<select id="billing_country" name="billing_country">
<option value="">Choose Country</option>
<option value="AF">Afghanistan</option>
<option value="AL">Albania</option>
<option value="AG">Algeria</option>
<option value="AQ">American Samoa</option>
<option value="AN">Andorra</option>
<option value="AO">Angola</option>
<option value="AV">Anguilla</option>
<option value="AY">Antarctica</option>
<option value="AC">Antigua and Barbuda</option>
<option value="AR">Argentina</option>
<option value="AM">Armenia</option>
<option value="AA">Aruba</option>
<option value="AT">Ashmore and Cartier</option>
<option value="AS">Australia</option>
<option value="AU">Austria</option>
<option value="AJ">Azerbaijan</option>
<option value="BF">The Bahamas</option>
<option value="BA">Bahrain</option>
<option value="FQ">Baker Island</option>
<option value="BG">Bangladesh</option>

5 个答案:

答案 0 :(得分:1)

根据HTML代码,我假设印度是以下选项的文字:

<option value="IN">India</option> 

对于这种情况,请尝试使用类似于Saifur的回复的以下代码,但使用不同的方法。

By element = driver.findElement(By.id("billing_country"));
Select foo = new Select(element);
foo.selectByVisibleText("India"); 

如果您想使用您的框架,请分享webdriver抛出异常。由于国家/地区列表太大,选项India可能不会显示webdriver单击并且会抛出类似的异常: org.openqa.selenium.WebDriverException:元素在点(XXX,YYY)处不可点击。其他元素将收到点击:

答案 1 :(得分:0)

首先,你有很多混合不同类型的等待,这是不应该做的。为了找到一个元素并检查它是否存在,显式等待在大多数情况下起作用。混合thread.sleepimplicit等待会给你一些非常糟糕的测试执行性能

其次,使用Select类找到下拉列表是最好的。您可以执行以下操作,简单易用。

By element = driver.findElement(By.id("billing_country"));
Select foo = new Select(element);
foo.selectByValue("AF"); //should select Afghanistan. I do not see India

请参阅API文档here

答案 2 :(得分:0)

driver.findElement(By.id("billing_country")).click();
driver.findElement(By.xpath("//*[@id='billing_country']//*[contains(., 'India')]")).click();

试试这个。看看它是否有效。您可以将'*'替换为实际标签,但除非您在其他地方存在“billing_country”ID,否则我没有理由这样做。

编辑:

如其他地方所述,您可能需要确保该项目在实际点击之前是可点击的,在这种情况下,您可以使用javascript将项目滚动到视图中。

答案 3 :(得分:0)

在你的html中,<option value="IN">India</option>应该是印度。

你有:clickThis.selectByValue("IN");

如果您尝试clickThis.selectByVisibleText("India"); t将起作用。

答案 4 :(得分:0)

driver.findElement(By.xpath("//*[@id='billing_country']//*[contains(., 'India')]")).click();

通过使用这个测试用例只能选择一个值,如果我给了另一个值而不是&#34;印度&#34;但这是以印度为例,如果对此测试用例有任何更正,请告诉我。