Это не прямой ответ на вопрос (его не о Actions
), но он также позволяет легко прокручивать требуемый элемент:
element = driver.find_element_by_id('some_id')
element.location_once_scrolled_into_view
Это на самом деле намерено вернуть вам координаты (x
, y
) элемента на странице, но также прокрутите вниз до целевого элемента
EDIT: О, это работает.
String script = "return document.getElementById('hidden_div').innerHTML";
В firefox.
И это тоже.
String script = "return arguments[0].innerHTML";
Я тоже попытался, но это похоже, не работает с чистым Javascript. Запустите браузер с JQuery, как упоминалось здесь. Как использовать JQuery в Selenium? и использовать следующий код для скрипта.
String script = "return $('#hidden_div').text();";
Это работает.
Попробуйте
WebElement hiddenElement = GET YOUR ELEMENT HERE;
String hiddenContent= hiddenElement.getAttribute("textContent");
type='hidden'
Когда мы сталкиваемся с любым таким случаем, прежде всего нам нужно попробовать любое действие, которое не вносит никаких изменений на эту страницу, например, перетаскивание и т. д., а затем переключение кадров.
Попробуйте getText()
, если это не сработает, попробуйте приведенное выше в качестве второго варианта.
Я относительно новичок в Selenium (и для программирования в целом), но я просто использую решение, которое сработало для меня.
Selenium 2 не был разработан для непосредственного управления элементами со скрытой видимостью. Например, вы не сможете найти его ID или CSS-селектор.
У меня была ситуация с ботом, где у меня была таблица HTML с большим количеством иены, и при нажатии, когда из них выпадало раскрывающееся меню со скрытой видимостью. Это было даже в другом фрейме.
Это конкретная ситуация, но я не мог найти никакого решения, поэтому я выбрал этот (плохой), но это работает действительно последовательно, несмотря на уродливый код.
Сначала вы должны switchToDesiredFrame();
- ввести логику driver.switchTo.frame()
здесь.
Than:
WebElement table = driver.findElements(By.tagName("table")).get(index_1);
List<WebElement> dataCells= table .findElements(By.tagName("td"));
WebElement spceificDataCellIWanted = dataCells.get(index_2);
System.out.println(spceificDataCellIWanted.getText());
DataCells являются буквально тегами <td>
, и они становятся WebElements
в списке, так как <td>
- это элементы в список под контейнером <table>
.
Он работал на Chrome и Firefox для меня, но не в любом браузере без браузера, не совсем точно, почему. Если вы, ребята, сталкиваетесь с чем-то подобным и имеете более элегантное решение (возможно, не так сложно его найти), пожалуйста, поделитесь!
Я столкнулся с той же проблемой чтения невидимых элементов, но мне хотелось вернуть объект WebElement для дальнейшего разбора (а не только его текста).
Этот бит кода выполнил мое требование.
(WebElement) ((JavascriptExecutor) driver).executeScript(
"arguments[0].style[\"display\"] = \"block\";"+
"arguments[0].style[\"visibility\"] = \"visible\";"+
"return arguments[0];",
element);
Основываясь на работе уже предоставленных ответов, я создал этот метод утилиты (Java). Возможно, это полезно для кого-то другого.
public static String getText(WebDriver driver, WebElement element){
return (String) ((JavascriptExecutor) driver).executeScript(
"return jQuery(arguments[0]).text();", element);
}
Может быть полезно также:
В некоторых случаях может оказаться полезным получить скрытый текст, который можно извлечь из атрибута textContent
, innerText
или innerHTML
элемента, вызвав element.attribute('attributeName')
.
element.getAttribute("textContent")
работал для меня.
Подробнее см. там -> http://yizeng.me/2014/04/08/ получить-текст-из-скрытых элементов, используя селенистые-WebDriver /