2014-10-10 2 views
0

Selenium, тестирование NUnit, C#, Visual Studio.Получение элемента по ID

Как, в Selenium WebDriver, я могу найти элемент в исходном коде страницы, который выглядит следующим образом, и установить какой-нибудь текст в <p> теге:

<body contenteditable="true" class="cke_editable cke_editable_themed cke_contents_ltr cke_show_borders" spellcheck="false"> 
<p></p> 
</body> 

Это тело тег из CKEditor компонента, присутствующих на странице (не главная страница <body> элемент). На самом деле, мне нужно установить текст в элементе <p>. Что меня смущает, так это то, что атрибут класса сложный, содержит несколько строк. Мне известно о команде: driver.findElement(By.className("some_class_name"));, но как ее использовать в этом случае и установить некоторый текст в элементе <p>?

+1

Этот ответ http://stackoverflow.com/a/24061054/3124333 использует немного другой редактор и Java, но подход должен быть одним и тем же. – SiKing

ответ

0

Если вы даете р тегу идентификатор, как так

<p id="derp">Text here</p> 

Вы можете отправить текст к нему с помощью Selenium как этого

driver.find_element_by_id("derp").sendKeys("herp"); 

Надеется, что это помогает!

EDIT: Без добавления идентификатора элемента, вы могли бы быть в состоянии сделать что-то вроде этого

driver.findElement(By.className("some_class_name")).findElement(By.tagName("p")).sendKeys("herp"); 
+0

Мне не разрешено редактировать дизайн. Просто написать тесты для этого приложения. – Vladimir

0

Если вы хотите р elelement, то это относительное XPath должно работать.

//body[@class='cke_editable cke_editable_themed cke_contents_ltr cke_show_borders']/p 

Это предполагает, что существует только один элемент тела с этим атрибутом класса.

0

Как вы говорите, для местоположения нет идентификатора, поэтому вам нужно придумать другое решение.

Selenium способен использовать селектор css - это та же самая схема, найденная в файлах CSS, чтобы указать, к каким элементам должны применяться следующие правила стилизации.

Одним из возможных локатора будет следующее:

body.cke_editable.cke_editable_themed.cke_contents_ltr.cke_show_borders > p 

преимущество над XPath: CSS селекторы знают о группах, поэтому они не обрабатывают их только как строки. Используя только выражение XPath против точного атрибута класса, ваше распознавание завершится неудачно, если будет другой, новый класс с атрибутом. С помощью селекторов CSS можно действительно просто определить класс.

упрощенный и сводились к классам, которые действительно описывают ваш редактируемый элемент, следующий должен быть достаточным:

body.cke_editable.cke > p 
Смежные вопросы