如何选择Selenium中没有名称或ID的下拉列表

时间:2017-09-09 12:02:36

标签: java selenium

我无法选择没有与之关联的属性的下拉列表。在HTML代码下方,可以看到有一个select标签但没有id或名称。如何在Selenium中选择该标签?

<!DOCTYPE html>
<html>
<body>

<select>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel">Opel</option>
  <option value="audi">Audi</option>
</select>

</body>
</html>

以下是该下拉列表所在的网站。 网站:https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select

我尝试过从文档的根目录开始,跟随兄弟等等,但没有任何结果。 我得到 NOSUCHELEMENT EXCEPTION

这就是我在这里发帖的原因。

以下是我的代码,

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

public class X 
{  
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select");
        WebElement element= driver.findElement(By.xpath("/html/body/select"));
        Select s = new Select(element);
        s.selectByValue("saab");
    }
}

3 个答案:

答案 0 :(得分:1)

实际上问题在于,您的元素位于iFrame首先,您需要在页面中找到正确的iFrame,即名称为iframeResult,然后切换到它。

然后,您可以使用标记名本身找到相同的下拉列表: 使用以下代码,如果有任何问题,请告诉我

driver.get("https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select");
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

driver.switchTo().frame("iframeResult");
WebElement element = driver.findElement(By.tagName("select"));
Select select = new Select(element);
select.selectByIndex(1);

答案 1 :(得分:0)

首先,点击你的元素展开下拉列表:
s.click()

接下来尝试以下方法之一:

  • s.selectByValue("saab")
  • s.selectByVisibleText("saab")
  • s.selectByIndex(1)

答案 2 :(得分:0)

您的代码是正确的一半,首先您必须切换到框架,然后尝试从下拉列表中选择值。你的正确代码应该是这样的:

public class X 
{  
    public static void main(String[] args) throws InterruptedException {
        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select");
        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);

        driver.switchTo().frame("iframeResult");
        WebElement dropdownBrands = driver.findElement(By.xpath("/html/body/select"));
        Select s = new Select(dropdownBrands);
        s.selectByVisibleText("Saab");

    }
}