通过Id获取元素

时间:2014-10-10 12:31:58

标签: c# selenium selenium-webdriver

Selenium,NUnit测试,C#,Visual Studio。

在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>元素中设置一些文本。令我困惑的是,class属性很复杂,包含几个字符串。我知道命令:driver.findElement( By.className( "some_class_name" ));但在这种情况下如何使用它并在<p>元素中设置一些文本?

3 个答案:

答案 0 :(得分:0)

如果你给p标签一个像这样的ID

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

您可以像这样使用Selenium发送文本

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

希望这有帮助!

编辑:如果没有为元素添加ID,您可能可以执行类似这样的操作

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

答案 1 :(得分:0)

如果你想要p元素,那么这个相对xpath应该可以工作。

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

假设只有一个具有此类属性的body元素。

答案 2 :(得分: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