C# 通过Id获取元素

C# 通过Id获取元素,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,Selenium,NUnit测试,C#,Visual Studio 在Selenium WebDriver中,如何在如下所示的页面源中定位元素,并在其标记中设置一些文本: <body contenteditable="true" class="cke_editable cke_editable_themed cke_contents_ltr cke_show_borders" spellcheck="false"> <p></p> </body>

Selenium,NUnit测试,C#,Visual Studio

在Selenium WebDriver中,如何在如下所示的页面源中定位元素,并在其
标记中设置一些文本:

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

这是页面上存在的
CKEditor
组件的主体标记(不是主页
元素)。
实际上,我需要在
元素中设置一些文本。让我困惑的是,class属性很复杂,包含多个字符串。我知道命令:
driver.findElement(By.className(“some_class_name”)
但是在这种情况下如何使用它,以及如何在
元素中设置一些文本?

如果您给p标记这样的ID

<p id="derp">Text here</p>
希望这有帮助

编辑:不向元素添加ID,您可能可以执行以下操作

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

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

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

这是假设只有一个body元素具有这个class属性。

正如您所说的,没有可用于location的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

我不允许编辑设计。这个答案使用的编辑器和Java略有不同,但方法应该是相同的。