Я использую FirefoxDriver в приложении, которое быстро перемещается по нескольким похожим, но не идентичным страницам. Чтобы ускорить выполнение (мне нужно использовать FF), я установил для свойства webdriver.load.strategy значение «нестабильный». Это действительно ускоряет работу, не загружая страницы полностью, но я обнаружил очень странную ошибку.
Изучив файл со списком страниц и данными о них, я обнаружил, что некоторые страницы сопоставлены с неправильными данными. Когда я отлаживал, все работало нормально при пошаговом режиме, но как только я позволял программе запускаться хотя бы на несколько страниц, она снова начинала получать данные не с той страницы. (Чтобы уточнить, например, если я сделаю driver.get(www.google.com)
, затем driver.get(www.stackoverflow.com)
, а затем сделаю driver.findElements()
, чтобы получить заголовок страницы StackOverflow, он вернет «Google».)
При внимательном наблюдении за работой браузера мне показалось, что существует несоответствие между URL-адресами в поле URL-адреса и фактически отображаемыми страницами. URL-адреса менялись намного быстрее, чем страница. Я подозреваю, что происходит то, что драйвер не ждет полной загрузки страницы перед вызовом findElements и, следовательно, получает элементы с предыдущей страницы, которые имеют те же имена классов.
Это имеет некоторый смысл, учитывая то, что должен делать webdriver.load.strategy 'stable', но я установил ожидание для элемента на странице, и, похоже, он не ждет. Может ли это быть потому, что на каждой странице есть один и тот же элемент, поэтому этот элемент уже был виден? Я не могу ждать ничего другого, потому что все страницы имеют одинаковую настройку - отличается только отдельный текст, и я заранее не знаю, что это будет.
Кто-нибудь сталкивался с этой проблемой? Верно ли мое предположение о том, что вызывает проблему? Могу ли я что-нибудь с этим поделать, кроме удаления стратегии нестабильной загрузки?
Спасибо, bsg EDIT. Я добавляю некоторый код, хотя код отлично работает, когда webdriver.load.strategy 'stable' не установлен.
for(String url : urllist)
{
driver.get(url);
WebElement header = (new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.tagName("h1")));
elements = driver.findElements(By.className(elementclassname));
}
Обратите внимание, что на каждой странице есть h1 и несколько элементов с class=elementclassname.