我是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是正确的。
请帮帮我。 感谢
答案 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;
}
html/body/main/section[2]/div/div/div[2]/table/tbody/tr[1]/td[1]/a
看起来有点脆,因为它是绝对的。尝试为其中一个元素找到唯一标识符(id最好),然后找到你的元素。答案 1 :(得分:-1)
如果表是ajax生成的,也许您应该实现某种waitForElement
而不是简单的findElement
?在我的测试中,我编写了一个等待jQuery准备好的方法,并且它工作得很好。我怀疑你的异常的原因是当你试图找到它时,元素根本就不存在。
你也可以先尝试只获得一个更高级别的元素然后更深入地工作。这样你就可以弄清楚缺少什么元素,看看需要什么样的等待。