检查Selenium中多个页面的标题

Check title of multiple pages in Selenium

本文关键字:标题 Selenium 检查      更新时间:2023-09-26

我目前正在使用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时,页面已经更改,因此断言失败。这种情况的最佳模式/解决方案是什么?

如果我正确阅读了你的问题,那么你的断言失败了,因为断言发生在页面完全加载到浏览器之前?我认为您需要在这里提到的getTitle呼叫周围使用"等待"逻辑

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

如果您只想检查页面中所有链接的标题,您可以将驱动程序更改为

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