检查Selenium中多个页面的标题

时间:2014-11-04 15:17:49

标签: javascript testing selenium automated-tests

我目前正在使用WebDriver.js在Browserstack上运行一些自动化测试。我的目标是获取给定div中的所有href,打开它们并检查链接所指向的页面的标题。要做到这一点,我正在做以下事情:

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);
    });
}

我的问题是getgetTitle都是异步方法,因此当我调用getTitle时,页面已经被更改,因此断言失败了。这种情况的最佳模式/解决方案是什么?

2 个答案:

答案 0 :(得分:1)

如果我正确地阅读您的问题,您的断言失败,因为断言发生在页面完全加载到浏览器之前?我想你需要等待&#34;等等。 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();

答案 1 :(得分: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);
        });         
    }
    }