为什么无法使用WebDriver找到此元素?

时间:2015-05-18 21:36:44

标签: java xpath selenium-webdriver

我开始使用WebDriver和Java进行UI自动化。当我尝试选择组合框的元素时,我遇到了问题。这是代码:

WebDriver driver = new FirefoxDriver();
driver.get("http://intersite.com/");
new Select(driver.findElement(By.xpath(".//*[@id='term']"))); //Exception happens in this line org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":".//*[@id='term']"}

这是网站上的代码(我使用Firepath来了解Xpath):

<select name="term" onchange="getTipDoc('');" id="term" class="termination"><option value="">-- Select an Option --</option>
                            <option value="OPT1">Option 1</option>
<option value="OPT2">Option2</option>
</select>

我在标签选择中看到,ID属性是正确的但是异常总是发生。我尝试使用其他方法来定位元素,如“By.id”,但也不起作用。我该怎么办?

问候!

2 个答案:

答案 0 :(得分:2)

在这种情况下可能会出现几种可能的原因

  • 您正在寻找的元素位于iframe内。使用driver.switchTo().frame(driver.findElement(somethting));
  • 元素查找比加载时间快。在这种情况下使用显式等待。 WebElement myDynamicElement = (new WebDriverWait(driver, 10)).until(ExpectedConditions.presenceOfElementLocated(By.id("term")));请参阅this
  • 有重复的ID。尝试使用select[id='term'][class='termination']作为cssSelector

当然,使用By.id()因为ID可用。

答案 1 :(得分:1)

在尝试获取其元素之前,您需要等待获取页面,此代码将帮助您完成此操作

WebDriverWait wait = new WebDriverWait(driver, 5);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//*[@id='term']")));