2016-08-15 47 views
2

CSS和具體的文本選擇表裏面TD元素可以說我有以下TBODY它表示該日曆日曆我有很多TD的文本里面是這樣的:如何利用內幕TD

<tbody> 
    <tr> 
     <td>31</td> 
     <td>1</td> 
     ... 
    </tr> 
    <tr> 
     <td>8</td> 
     <td>9</td> 
     ... 
    </tr> 
    </tbody> 

比方說我想點擊一個特定月份的所有選項,而點擊其中移動到下一個或前一個月的選項,我用這個

for (var i=1;i<32;i++){ 

      element(by.css('body > div:nth-child(7) > div.calendar.left.single > div.calendar-table > table > tbody td')).element(by.buttonText(i)).click(); 
     } 

這是選擇路徑tbodybody > div:nth-child(7) > div.calendar.left.single > div.calendar-table > table > tbody td

.element(by.buttonText(i)).click();不工作我想buttonText心不是工作td元素

EDITS: 眼下,除了其工作過第二迭代循環時,它給我的錯誤:元素不可見的,而它是可見的...

Page.js

var Page = function() { 
    var that = this; 
    //ELEMENTS 
    this.from = element(by.xpath('//*[@id="html"]/body/app/div/layout/div/app-tabs/div/div/div/div/app-tabs-page/app-tabs-page-content/tcmetadata/div/div/div[1]/div[1]/tc-filters/div/form[2]/div[1]/label/input')); 
    this.to = element(by.xpath('//*[@id="html"]/body/app/div/layout/div/app-tabs/div/div/div/div/app-tabs-page/app-tabs-page-content/tcmetadata/div/div/div[1]/div[1]/tc-filters/div/form[2]/div[2]/label/input')); 

    //EVENTS 
    this.clickElements = function(els){ 
     els.each(function (el){ 
      el.click(); 
     }); 
    } 
    this.clickElement = function(el){ 
     el.click(); 
    } 
}; 
module.exports = new Page; 

test.js:

var page = require('./Page'); 
    it('should ask any question', function() { 

     for (var i=1;i<15;i++){ 
      page.clickElement(page.from); 

      element(by.xpath('//*[@id="html"]/body/div[1]/div[1]/div[2]/table/tbody')).element(by.xpath('//td[text()='+i+']')).click(); 
      for (var j=i; j<15;j++){ 
       page.clickElement(page.to); 
       browser.sleep(1000); 
       element(by.xpath('//*[@id="html"]/body/div[2]/div[1]/div[2]/table/tbody')).element(by.xpath('//td[text()='+j+']')).click(); 
      } 

     } 

    }); 

第一個循環工程,但,當它進入第二圈我得到一個錯誤 「元素不可見」與browser.sleep我可以看到它的可見

+0

而不是這樣做,我建議,將uniq id添加到每個,並使用'for loop'並稍加修改。 – hgsongra

+0

是的,但日曆使用日曆的Jquery插件呈現,並向所有td添加ID將是非常長的故事 –

回答

1

你可以使用cssContainingText的CSS選擇器與文本結合的條件:

var calendar = element(by.css('body > div:nth-child(7) > div.calendar.left.single > div.calendar-table > table > tbody')); 
for (var i = 1; i < 32; ++i) { 
    calendar.element(by.cssContainingText('td', i.toString())).click(); 
} 

您還可以使用XPath查找的文字:

var calendar = element(by.css('body > div:nth-child(7) > div.calendar.left.single > div.calendar-table > table > tbody')); 
for (var i = 1; i < 32; ++i) { 
    calendar.element(by.xpath(".//td[text()='" + i + "']")).click(); 
} 

,並使其速度更快,我會中的XPath內評估號:

var calendar = element(by.css('body > div:nth-child(7) > div.calendar.left.single > div.calendar-table > table > tbody')); 
var months = calendar.all(by.xpath(".//td[text() > 0 and text() < 32]")); 
months.each(e => e.click()); 
+0

請參閱我的編輯幾乎正在工作 –

+0

@Georgi Antonov,編輯中的XPath應以一個點開始,元素:''))。element(by.xpath('.// td' –

+0

所以我在// td之前添加了兩個點,它工作的很好,但自從我的callendar在上個月和下個月的日期裏面我怎麼添加第三種選擇方法,以便它不會選擇具有特定類別的TD在我的情況下,我不想選擇具有「關閉」類的TD元素, –