2014-11-04 2 views
1

В настоящее время я использую WebDriver.js для запуска автоматического тестирования на браузере. Моя цель - взять все hrefs в данном div, открыть их и проверить название страницы, на которую указывает ссылка. Для этого я делаю следующее:Проверить название нескольких страниц в Selenium

for (var i = 0; i < hrefs.length; i++) { 
    var href = hrefs[i], 
     site_name = sites_names[i]; 

    driver.get(href); 
    driver.getTitle().then(function(title) { 
     assert.equal(title, site_name); 
    }); 
} 

Моя проблема заключается в том, что get и getTitle являются асинхронные методы и, таким образом, когда я звоню getTitle страница уже изменилась, и, таким образом, утверждение терпит неудачу. Какова наилучшая модель/решение для подобных ситуаций?

ответ

1

Если я правильно читаю ваш вопрос, ваши утверждения терпят неудачу, потому что утверждение происходит до того, как страница полностью загружена в браузере? Я думаю, что вам требуется «ждать» логику вокруг вашего getTitle вызова как mentioned here

var webdriver = require('selenium-webdriver'); 

var driver = new webdriver.Builder().withCapabilities(webdriver.Capabilities.chrome()).build(); 

driver.get('http://www.google.com'); 
driver.findElement(webdriver.By.name('q')).sendKeys('webdriver'); 
driver.findElement(webdriver.By.name('btnG')).click(); 
driver.wait(function() { 
return driver.getTitle().then(function(title) { 
    return title === 'webdriver - Google Search'; 
}); 
}, 1000); 

driver.quit(); 
+0

Спасибо за ваш ответ. Проблема не в этом. Позвольте мне объяснить это лучше: предположим, у меня есть 2 массива один с hrefs ['google.com', ..., 'foobaz.bar'] и один с ожидаемыми заголовками ['Google', ... 'Foo Bar Inc . ']. Моя проблема заключается в том, что 'get' и' getTitle' не синхронизированы, и, таким образом, я заканчиваю загрузкой страницы foobaz.bar и проверкой названия «Google». –

+0

использовать список или любые коллекции по массиву – Babulu

+0

@MarcelloRomanelli В качестве примера, если hrefs [0] = 'google.com' и site_names [0] = 'Google', то единственный возможный способ, который будет вызывать, если тест не ждет достаточно долго, чтобы страница загружалась, прежде чем проверять заголовок. Как упоминалось ранее, завершение вызова driver.getTitle() в ожидании должно решить проблему. – shri046

0

Если вы хотите просто проверить название всех ссылок, присутствующих на вас странице вы можете изменить свой драйвер

WebDriver driver = new HtmlUnitDriver(); 

Это просто хорошая практика .... не обязательно (для увеличения скорости выполнения). После проверки заголовка вы можете изменить свой драйвер на оригинал. Используйте следующий код для перебора действительный HREF один за другим и утверждать его соответственно

List<WebElement> allLinks = driver.findElements(By.tagName("a")); // use tagname according to the need 

    for (WebElement link : allLinks) { 
    if (link.getAttribute("href") != null && link.getText().isEmpty()==false) { //again modify the condition here accordingly 
     driver.get(link.getAttribute("href")); 
     driver.getTitle().then(function(title) { 
      assert.equal(title, site_name); 
     });   
    } 
    } 
Смежные вопросы