硒没有找到元素

时间:2013-07-25 09:00:20

标签: java eclipse selenium webdriver selenium-webdriver

这是HTML: https://www.dropbox.com/s/aiaw2u4j7dkmui2/Untitled%20picture.png

我不明白为什么这段代码在页面上找不到元素。该网站不使用iframe。

@Test
public void Appointments() {
    driver.findElement(By.id("ctl00_Header1_liAppointmentDiary"));
}

这是我收到的错误消息:

FAILED: Appointments
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"id","selector":"ctl00_Header1_liAppointmentDiary"}

5 个答案:

答案 0 :(得分:8)

这是时间问题吗? AJAX加载的元素(或整个页面)是?当你试图寻找它时,页面上可能没有它,WebDriver通常“太快”。

要解决它,可以是implicit or explicit wait

隐含等待方式。由于隐式等待集,如果它不立即出现(这是异步请求的情况),它将尝试等待元素出现在页面上,直到它超时并像往常一样抛出:

// Sooner, usually right after your driver instance is created.
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

// Your method, unchanged.
@Test
public void Appointments() {
    ...
    driver.findElement(By.id("ctl00_Header1_liAppointmentDiary")).doSomethingWithIt();
    ...
}

显式等待方式。这只会在查找时等待页面上出现这一个元素。使用ExpectedConditions类,您也可以等待不同的东西 - 元素可见,可点击等等:

import static org.openqa.selenium.support.ui.ExpectedConditions.*;

@Test
public void Appointments() {
    ...
    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(presenceOfElementLocated(By.id("ctl00_Header1_liAppointmentDiary")))
        .doSomethingwithIt();
    ...
}

答案 1 :(得分:2)

您正在搜索ctl00_Header1_liAppointmentDiary,但只有Header1_liAppointmentDiary,这些不一样......

ctl00_Header1_liAppointmentDiary != Header1_liAppointmentDiary

答案 2 :(得分:2)

html中没有id="ctl00_Header1_liAppointmentDiary"的元素

driver.findElement(By.id("ctl00_Header1_liAppointmentDiary"));

应该是

driver.findElement(By.id("Header1_liAppointmentDiary"));

答案 3 :(得分:0)

driver.findElement(By.ClassName("MyAppointments"));

如果webdriver无法通过xpath或id找到元素,那么尝试所有可以使用的By选项通常是个好主意

http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/By.html

答案 4 :(得分:-1)

查看代码我认为您尝试单击的链接是在下拉列表中,或者您需要将鼠标悬停在某些内容上才能看到此链接。如果是这样,那么您将使元素可见以执行操作。