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>
元素中设置一些文本?
答案 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