2014-10-10 238 views
0

Selenium,NUnit測試,C#,Visual Studio。通過Id獲取元素

如何,在硒的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 2014-10-10 15:38:50

回答

0

如果你給p標籤的ID,像這樣

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

您可以發送文本它使用Selenium這樣

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

希望這有助於!

編輯:無需添加ID的元素,你可能會如果你想在p elelement那麼這個相關的XPath應該工作可以做這樣的事情

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

我不允許編輯設計。只是爲這個應用程序編寫測試。 – Vladimir 2014-10-10 12:45:16

0

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

這是假設只有一個具有此類屬性的主體元素。

0

正如你所說,沒有id可用於位置,所以你必須想出一個不同的解決方案。

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