簡體   English   中英

無法使用Selenium WebDriver找到下拉值

[英]Not able to locate the dropdown value using 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>

通過HTML代碼查看,我假設印度是如下所示的選項的文本:

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

對於這種情況,請嘗試使用與Saifur的回復類似的以下代碼,但使用不同的方法。

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

如果要使用您的框架,請共享Webdriver引發的異常。 由於國家/地區列表太大,因此對於選項卡印度來說,對於網絡驅動程序而言,單擊可能不可見,並且會引發類似以下異常:org.openqa.selenium.WebDriverException:元素在點(XXX,YYY)不可單擊。 其他元素將獲得點擊:

首先,您會混合許多不應該進行的不同類型的等待。 要查找元素並檢查其是否存在,顯式等待在大多數情況下適用。 混合使用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文檔

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

嘗試這個。 看看是否可行。 您可以用'*'代替實際的標簽,但是除非您的“ billing_country”的ID在其他地方存在,否則我看不出原因。

編輯:

如在其他地方提到的,您可能需要確保在實際單擊項目之前可單擊該項目,在這種情況下,可以使用javascript將項目滾動到視圖中。

在您的html中, <option value="IN">India</option>應該用於印度。

您具有: clickThis.selectByValue("IN");

如果嘗試clickThis.selectByVisibleText("India"); 它會起作用。

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

通過使用該測試用例,只能選擇一個值,以防萬一如果我給了另一個值而不是“ India”,但它本身就是印度,請告訴我是否對此測試用例進行了任何更正

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM