В настоящее время существует пара ссылок, которые предполагают, что они помогут в решении этой задачи: общие (1) и конкретные (2).
Однако (1) не содержит никакого кода для начала и (2) содержит только js однострочный.
Мой вопрос в том, как получить значения из ячеек строк, созданных extjs?
Например, у меня есть элемент строки
div#ext-gen-list-057-r.x-grid3-row.grid-rowcolor-black.grid-fontweight-normal.grid-fontstyle-normal.recordListRow.TableEvenRow.x-grid3-row-first.x-grid3-row-focus
где ячейки представлены как
td.x-grid3-col.x-grid3-cell.x-grid3-td-0.x-grid3-cell-first
Как получить значения с помощью python и selenium webdriver?
UPD
После некоторого поиска обнаружено несколько деталей:
browser.find_element(By.ID, 'element-id')
просто не будет работать на веб-странице ExtJS, как только document.getElementById('element-id')
равен null
(исправьте меня, если это не так)Ext.getBody('body-element-id')
страницы - Ext.getBody('body-element-id')
Однако нет такого метода для Select
в selenium.webdriver.support.ui
, который позволит получить доступ к элементам тела.
Таким образом, проблема еще не решена.
Может быть, этот образец Java-кода может вам помочь. Он напрямую не отвечает на ваш вопрос, но вы можете легко преобразовать его в python, а также получить представление о решении вашей проблемы.
Этот код получает сетку extjs со страницы, выполняет итерацию через свои строки, чтобы проверить, есть ли какая-либо ячейка, содержащая идентификатор примера (1010294), затем получить соответствующую строку и щелкнуть 8-ю ячейку в этой строке. 8-я ячейка содержит кнопку для клика.
WebElement editCustTable = driver.findElement(By.className("x-grid-table"));
List<WebElement> tableRows = editCustTable.findElements(By.tagName("tr"));
for (Iterator iterator = tableRows.iterator(); iterator.hasNext();) {
WebElement row = (WebElement) iterator.next();
// if tr contains id = '1010294'
if(row.getAttribute("id").contains("1010294")){
List<WebElement> tds = row.findElements(By.tagName("td"));
tds.get(8).click();
break;
}
}