我目前正在使用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);
});
}
我的问题是get
和getTitle
都是异步方法,因此当我调用getTitle
时,页面已经被更改,因此断言失败了。这种情况的最佳模式/解决方案是什么?
答案 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);
});
}
}