2014-10-10 240 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