2013-06-17 4 views
3

Я пишу текст в Selenium, который получает самый левый столбец таблицы и проверяет, что строки в их ячейках соответствуют списку дат, которые у меня есть. Код у меня выглядит примерно так:Проблемы с Python Selenium WebElements и .text

dates = ["20130501", "20130502", "20130506", "20130507", "20130508", "20130509", "20130510", "20130513", "20130514", "20130515"] 
mytable = self.driver.find_element(By.ID, "mytable") 
datecells = mytable.find_elements(By.CSS_SELECTOR, "tbody td:first-child") 
for date, cell in zip(dates, datecells): 
    print "'{0}', '{1}'".format(date, cell.text) # For debugging 
    #self.assertEqual(date, cell.text) 

Когда утверждают, что осталось закомментирована, я получаю это распечатывается в результате:

 
'20130501', '' 
"20130502', '' 
'20130506', '' 
'20130507', '' 
'20130508', '' 
'20130509', '' 
'20130510', '' 
'20130513', '' 
'20130514', '' 
'20130515', '' 

Странная вещь, если я поставил точку останова на печать (с использованием MyEclipse с PyDev), и посмотрите на ячейку на вкладке переменные Pydev отладки, прежде чем это выход, я могу видеть правильный текст, и выводит код, как и ожидалось:

 
'20130501', '20130501' 
'20130502', '20130502' 
'20130506', '20130506' 
'20130507', '20130507' 
'20130508', '20130508' 
'20130509', '20130509' 
'20130510', '20130510' 
'20130513', '20130513' 
'20130514', '20130514' 
'20130515', '20130515' 

есть некоторые странные набл erver effect quirk свойств WebElement .text, где это может быть только правильно оценено этим отладчиком, или есть какое-то условие, которое я должен ожидать, чтобы получить правильные значения из ячеек без необходимости проходить через них?

+0

Кажется, что-либо во время или после назначения 'datecells' (включая переход в функцию выполнения WebDriver и расширение его результата до его возврата), я могу сломать, посмотреть на элементы в отладчике и продолжить, в результате в правильных значениях. – TransatlanticFoe

ответ

4

После тестирования немного с PhantomJS игровой WebDriver, я был в состоянии понять, что это проблема с WebDriver Firefox, в частности, и нашел это ранее задаваемый вопрос: WebElement getText() is an empty string in Firefox if element is not physically visible on the screen

Таким образом, после изменения для цикла в

for date, cell in zip(dates, datecells): 
    self.driver.execute_script("arguments[0].scrollIntoView(true);", cell) 
    print "'{0}', '{1}'".format(date, cell.text) 
    self.assertEqual(date, cell.text) 

, чтобы прокрутить каждую ячейку в поле зрения до получения ее текста, я получил ожидаемый результат.

Смежные вопросы