无法使用Webdriver找到通过ajax生成的表元素

时间:2014-10-03 06:58:58

标签: ajax selenium xpath webdriver testng

我是Webdriver的新手,我不能让你知道网站名称和凭据,因为这是我公司正在进行的项目。 我被困在一个地方,在该网站的页面中,有一个表在运行时通过ajax生成,其中的所有数据也在运行时生成,该表中有一个元素,xpath为html/body/main/section[2]/div/div/div[2]/table/tbody/tr[1]/td[1]/a,但是当我试图使用webdriver找到这个元素时,webdriver无法找到该元素,我收到一条错误消息

org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"html/body/main/section[2]/div/div/div[2]/table/tbody/tr[1]/td[1]/a"}
Command duration or timeout: 50.10 seconds
Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=firefox, rotatable=false, locationContextEnabled=true, version=14.0.1, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=true, nativeEvents=false, webStorageEnabled=true, applicationCacheEnabled=true, takesScreenshot=true}]

我的代码是

 Assert.assertEquals(FrameWorkBase.driver.findElement(By.xpath("html/body/main/section[2]/div/div/div[2]/table/tbody/tr[1]/td[1]/a")).getText(),24514);

当我在firebug中输入上面的xpath时,它正在定位元素,意味着xpath是正确的。

请帮帮我。 感谢

2 个答案:

答案 0 :(得分:0)

一些事情: 1.尝试对你的元素进行明确的等待,结果就是这样。为你的元素调用这个方法..阅读more

public WebElement waitForElementToBeVisible(WebDriver driver, By by){

    WebDriverWait wait = new WebDriverWait(driver, 30);
    WebElement element = wait.until(ExpectedConditions.elementToBeClickable(by));
    return element;
}
  1. 你的xpath html/body/main/section[2]/div/div/div[2]/table/tbody/tr[1]/td[1]/a看起来有点脆,因为它是绝对的。尝试为其中一个元素找到唯一标识符(id最好),然后找到你的元素。

答案 1 :(得分:-1)

如果表是ajax生成的,也许您应该实现某种waitForElement而不是简单的findElement?在我的测试中,我编写了一个等待jQuery准备好的方法,并且它工作得很好。我怀疑你的异常的原因是当你试图找到它时,元素根本就不存在。

你也可以先尝试只获得一个更高级别的元素然后更深入地工作。这样你就可以弄清楚缺少什么元素,看看需要什么样的等待。