[英]Selenium.webdriver trying to find a tab text vaue
嗨,我正在使用mocha和node js,並且正在嘗試使硒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();
});
}
}); )};
它通過“我們有一些選項卡”,但是失敗“可以找到選項卡名稱”,並出現此錯誤
1個失敗
1)MYHtml可以找到選項卡名稱:TypeError:span.getText不是函數
我正在嘗試找到li-例如,span文本= 2,所以我可以單擊它。
到那時,您已經解決了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();
}
});
});
});
上面修改的EDIT代碼段可以處理數組,然后處理每個元素。
進一步的注釋添加有關XPATH方法的@sferret注釋。
或者使用XPATH,它可以最大程度地減少所需的代碼和處理量:
var tab=driver.findElement(By.xpath(".//div[@id='Tabs']/ul/li/span[contains(.,'two')]"));
但是,應小心,因為示例中的跨度或div移位會導致xpath迅速成為維護問題。 您必須考慮頁面中可能發生的變化並采取相應措施。 很少有更多的JS代碼會隨着時間的推移而變化,這比理論上由於標簽在頁面中的位置每周可能會變化的xPath的負擔更大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.