我有以下Selenium测试代码:
waitForElementList(driver, timeout, By.xpath(elementA);
waitForElementList(driver, timeout, By.xpath(elementB);
waitForElementList(driver, timeout, By.xpath(elementC);
waitForElementList(driver, timeout, By.xpath(elementD);
waitForElementList(driver, timeout, By.xpath(elementE);
waitForElementList(driver, timeout, By.xpath(elementF);
List<WebElement> elementA = driver.findElements(By.xpath(elementA));
List<WebElement> elementB = driver.findElements(By.xpath(elementB));
List<WebElement> elementC = driver.findElements(By.xpath(elementC));
List<WebElement> elementD = driver.findElements(By.xpath(elementD));
List<WebElement> elementE = driver.findElements(By.xpath(elementE));
List<WebElement> elementF = driver.findElements(By.xpath(elementF));
for(int i = 0; i < elementA.size(); i++){
int id = Integer.valueOf(elementA.get(i).getAttribute("class"));
//doing things with the other elements
}
public static void waitForElementList(WebDriver driver, int timeout, final By locator){
FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver)
.withTimeout(timeout, TimeUnit.SECONDS)
.pollingEvery(1, TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class)
.ignoring(StaleElementReferenceException.class);
wait.until(new Function<WebDriver, List<WebElement>>() {
public List<WebElement> apply(WebDriver driver) {
return driver.findElements(locator);
}
});
}如果我在任何浏览器中运行这段代码,而不是Internet,它就能正常工作。但是,如果我在Internet中运行它,它有时会在它想要获得属性"class“的行崩溃。出现了一个StaleElementReferenceException。有趣的是,这个异常只出现在Windows7 IE9上,而不是Windows IE8上。我在谷歌上搜索了很多如何解决这个问题的方法,但是没有一个解决方案对我有帮助。如果元素已经刷新或其他什么内容,则会出现此异常,但在waitForElementList()-methods之间,getAttribute调用并不是刷新。如果我只运行第一个waitForElementList()-method (用于elementA),而不运行其他waitForElementList()-methods,它就能工作。我现在不知道该怎么办了。谢谢你的帮助。
发布于 2012-01-26 06:37:19
刷新可以由页面上的javascript代码触发。它为一些IE专用的页面内容留下了空间,这给你带来了麻烦。
我会重新安排代码,以尽快提取元素的属性,作为临时甚至永久的解决方案。看来你已经知道该怎么做了。
UPD:
如果没有任何帮助,可以使用第三方库提取实际属性值,使用selenium只用于单击和浏览。
下面是在python中同时使用selenium和lxml的示例:
from lxml import etree
from selenium.webdriver import Firefox # IE, or Chrome
SEARCH_EDITBOX_CSS_CLASS_XPATH = '//input[@id="lst-ib"]/@class'
browser = Firefox()
browser.get('http://google.com')
html = browser.page_source
tree = etree.fromstring(html, parser=etree.HTMLParser())
css_classes = tree.xpath(SEARCH_EDITBOX_CSS_CLASS_XPATH)
print css_classes
# prints out list of 'class' attributes for each of elements found:
# ['gsfi']一旦你把整个页面的源代码放到可变站点脚本中,脚本就不会改变它,你将有无限的时间去玩它。
https://stackoverflow.com/questions/9002848
复制相似问题