Java 硒找不到元素

Java 硒找不到元素,java,eclipse,selenium,webdriver,selenium-webdriver,Java,Eclipse,Selenium,Webdriver,Selenium Webdriver,这是HTML: 我不明白为什么这段代码在页面上找不到元素。该网站不使用iFrame @Test public void Appointments() { driver.findElement(By.id("ctl00_Header1_liAppointmentDiary")); } 这是我收到的错误消息: FAILED: Appointments org.openqa.selenium.NoSuchElementException: Unable to locate element:

这是HTML:

我不明白为什么这段代码在页面上找不到元素。该网站不使用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"}

您正在搜索
ctl00\u Header1\u liappointdiary
,但只有
Header1\u liappointdiary
,它们不一样

ctl00\u Header1\u liappointmentdialog!=校长1_Liappoints日记

html中没有带有
id=“ctl00\u Header1\u liAppointmentDiary”
的元素

driver.findElement(By.id("ctl00_Header1_liAppointmentDiary"));
应该是

driver.findElement(By.id("Header1_liAppointmentDiary"));
试一试
driver.findElement(按.ClassName(“My约会”)

如果webdriver无法通过xpath或id找到元素,那么最好尝试所有可行的by选项


查看代码,我认为您试图单击的链接位于下拉列表下,或者您需要将鼠标悬停在某个地方才能看到此链接。如果是这样,则必须使元素可见以执行操作。

这是时间问题吗?元素(或整个页面)是否加载了AJAX?当您试图查找它时,它可能不在页面上,WebDriver通常“太快”

要解决它,要么

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

// 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();
    ...
}

屏幕截图没有显示任何id为ctl00\u Header1\u liAppointmentDiary
的元素,是吗?有
Header1\u liappointdiary
但是…图像上的id是Header1\u liappointdiary而不是ctl00\u Header1\u liappointdiary加载的元素是AJAX吗?你也尝试过等待吗?链接当前已断开。你能修好吗?我也试过了,但是我收到了同样的错误信息。我已经尝试通过xpath使用findElement,但是我得到了相同的错误,如果它只是不可见的,那么仍然可以找到元素。它不会抛出一个
NoTouchElementException
。当您尝试与元素交互时,它会抛出
ElementNotVisibleException
。我也希望如此,但我今天也遇到了同样的情况。在我向下滚动页面使其可见之前,不会检测到该元素。