当前位置: 首页 > 知识库问答 >
问题:

无法使用selenium webdriver定位下拉列表值

夹谷弘亮
2023-03-14

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

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

                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;

    }

}

超文本标记语言

<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>

共有3个答案

东郭腾
2023-03-14
driver.findElement(By.id("billing_country")).click();
driver.findElement(By.xpath("//*[@id='billing_country']//*[contains(., 'India')]")).click();

试试这个。看看能不能用。你可以用“*”来代替实际的标签,但我看不出有什么理由,除非你的“billing_country”id存在于其他地方。

编辑:

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

艾子石
2023-03-14

首先,你有很多不同类型的等待,这是不应该做的。为了找到一个元素并检查它的存在性,显式等待在大多数情况下都有效。混合线程。sleepimplicitwait将给您带来一些非常糟糕的测试执行性能

其次,使用Selectclass查找下拉列表是最好的。您可以执行以下简单且易于调试的操作。

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文档

卢杰
2023-03-14

通过超文本标记语言代码,我假设印度是选项的文本,如下所示:

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

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

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

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

 类似资料:
  • 我正在尝试定位一个下拉列表并从中选择一个选项,但是我无法定位下拉列表,因为没有id,名称,或任何明显的其他定位器来访问它。 我甚至尝试过使用xpath,我唯一的成功是单击下拉菜单并打开列表,但我无法从中选择任何项目。 我甚至尝试了类似的操作:String metric=“html/body/div[3]/div[2]/form/div/table/tbody/tr1/td[2]/div/a”;单击

  • 我试图从2个Ajax下拉字段中选择一个特定的值。第一个下拉选项列表打开,但没有选择选项,这就是为什么第二个下拉列表没有绑定并且错误发生的原因 org.openqa.selenium.nosuchelementException:找不到Element:option[value=“111”]。 请帮帮我..我是硒的新手 这是我的代码..

  • 我想根据ViewBag值过滤下面加载的ProductData dropdownlist,比如ViewBag。类别需要传递给GetProductData()的viewbag值。我怎样才能做到这一点。非常感谢。 控制器: //需要基于viewbag进行过滤。类别值

  • 问题内容: 我有一个带有已知值的下拉列表。我想做的是使用 jQuery 将下拉列表设置为一个我知道存在的特定值。使用常规 JavaScript,我将执行以下操作: 但是,我需要使用 jQuery 来完成此操作,因为我为选择器使用了 CSS类愚蠢的[ASP.NET客户端ID …)。 这是我尝试过的一些方法: 如何使用 jQuery ? 更新资料 事实证明,我第一次做对了: 当我在上面放置一个警报时,

  • 我正在使用剑道下拉列表,我需要一个占位符的下拉列表,当我选择下拉列表时,它不应该出现在列表中。我尝试使用optionLabel,但此值显示在列表中。 我需要一个解决方案,我可以添加一个占位符,该值不应显示为下拉列表中的选项。

  • 我有一个搜索表单,我必须按类别搜索,这是一个下拉列表。有2个表称为成员和类别。在类别表中有两个字段ID和名称(此名称字段存储类别的名称,如银行,医院...)。成员表中有一个名为类别的字段,该字段具有与类别表ID值相同的类别ID(类别字段在成员表中是一个外键)。 这是下拉列表的代码 在这段代码中,我有几个不明白的地方。