您好我正在使用mocha和节点js,我正在努力让selenium webdriver正常工作。该应用程序是SPA。 我想做的就是获取一个特定的选项卡,然后单击它。 我已经将html加载到测试中了。 这是一个片段
<div id="Tabs">
<ul>
<li> <span> one </span></li>
<li> <span> two </span></li>
...
<li> <span> six </span></li>
</ul>
</div>
在我的test.js中我有这个...
describe("MYHtml",function(){
var driver;
var tabs;
driver = new webdriver.Builder()
.forBrowser('firefox')
.build();
driver.get("file:///home/myhtml.html");
test.after(function() {
driver.quit();
});
before(function(done){
driver.findElement(By.id("Tabs")).then(function(e){
e.findElements(By.tagName("li")).then(function(b){
console.log("before got tabs length " + b.length);
tabs=b;
done();
});
});
});
test.it("we have some tabs",function(done){
assert.strictEqual(tabs.length,6);
console.log("we have tabs " + tabs.length);
done();
});
test.it("can find a tab name",function(done){
var span;
for(var i=0;i<tabs.length;i++){
tabs[i].findElements(By.tagName("span"))
.then(function(span){
console.log("Field??" + span.getText());
//return span;
done();
});
}
}); )};
它传递了&#34;我们有一些标签&#34; 但失败&#34;可以找到标签名称&#34; 有这个错误
1失败
1)MYHtml可以找到标签名称: TypeError:span.getText不是函数
我试图找到li - 例如span text = 2 所以我可以点击它。
答案 0 :(得分:0)
您已使用then解决了promise,因此返回span项目数组。返回数组后应该使用getText():
tabs[i].findElements(By.tagName("span"))
.then(function(spanArray){
console.log('Found spans length:'+ spanArray.length);
spanArray.forEach(function(nextElement) {
nextElement.getText().then(function(text) {
console.log('Text Found' + text);
// An if then check is required here so only
// one done is called.
if (/*---your condition here ---*/) {
done();
}
});
});
});
编辑上面修改的代码段,以处理数组,然后处理每个元素。
进一步评论 添加关于XPATH方法的@sferret评论。
或者使用XPATH,它可以最大限度地减少代码和处理所需的数量:
var tab=driver.findElement(By.xpath(".//div[@id='Tabs']/ul/li/span[contains(.,'two')]"));
但是应该注意,因为示例中的跨度或div移位,xpath很快就会成为维护问题。您必须考虑页面中可能发生的变化并采取相应措施。少量的更多JS代码不会随着时间的推移而变得比xPath更多的负担,理论上每周可能会因为选项卡放在页面中的位置而改变。