Java WebDriverWait不起作用

Java WebDriverWait不起作用,java,selenium,Java,Selenium,我使用的是Windows8,IE10(java-WebDriver 2.37.0),我试图等到元素加载到页面上。我使用了以下代码: WebDriver driver = new FirefoxDriver(); driver.get("http://abc.com"); WebElement myDynamicElement = ( new WebDriverWait(driver, 10).until( ExpectedConditions.presenceOfElementL

我使用的是Windows8,IE10(java-WebDriver 2.37.0),我试图等到元素加载到页面上。我使用了以下代码:

WebDriver driver = new FirefoxDriver();
driver.get("http://abc.com");
WebElement myDynamicElement = (
    new WebDriverWait(driver, 10).until(
    ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
但它抛出了一个超时异常。如果我删除此代码,它就能够识别webdriver上的元素

我在其他浏览器中尝试了与FireFox、Chrome相同的代码,但仍然抛出错误

感谢您的帮助


感谢您将等待分配给变量myDynamicElement。如果您不给WebElement变量一些操作,Selenium将抛出超时异常。如果只想等待元素出现,则无需将其分配给WebElement变量

WebDriver driver = new FirefoxDriver();
driver.get("http://abc.com");
new WebDriverWait(driver, 10).until(
    ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
如果需要分配该变量以供以后使用,请对该元素执行某些操作

WebElement myDynamicElement =
    new WebDriverWait(driver, 10).until(
    ExpectedConditions.presenceOfElementLocated(By.id("myDynamicElement")));
myDynamicElement.isDisplayed();

页面上是否存在ID为“myDynamicElement”的元素?是,页面上存在该元素。如果我删除上面的等待代码,它将标识该元素。它何时引发此异常?10秒后?是的。。在By.ID中-我们是否也可以使用xPath来识别它,或者它只能是ID?当然,您可以尝试xPath。它可能类似于
By.xpath(“/[@id='myDynamicElement'])
。但是,这应该与ID搜索相同;此外,如果您在wait之外找到元素,那么它应该不会有任何区别。有趣的是,这个例子似乎与上面的例子几乎相同,所以语法应该是正确的;可能是关于页面的什么。你能详细说明一下你刚才写的吗?如果我理解正确,你就错了。如果我误解了,我认为可以肯定地说,答案可能需要一些推理。为什么将返回的元素分配给变量会改变什么呢?我只是自己测试了一下,看看他在说什么。将WebDriverWait分配给变量时,必须使用该变量,否则它将引发超时异常。可能是一个缺陷,但我能够重现他所说的内容,修复方法是不将其分配给变量或使用该变量;waiting.until(ExpectedConditions.presenceOfElementLocated(By.xpath(//a[@name='footer\u site\u map']));这段代码在Chrome和FireFox浏览器中都可以使用,但在IE10上不起作用。知道为什么会这样吗?基本上,我只是试图等到元素加载到页面上。谢谢大家的帮助,没问题!这是WebDriverWait更好的用法。IE10可能在xpath方面有问题。如果可以,请在此处使用CSS:By.cssSelector(“a[name='footer\u site\u map']),谢谢NaviSaysListen。我也会试试。
  public static void waitForElementToAppear(Driver driver, By selector, long timeOutInSeconds) {
    WebDriverWait wait = new WebDriverWait(driver, timeOutInSeconds);
    wait.until(ExpectedConditions.visibilityOfElementLocated(selector));
  }