如何通过C#和Selenium将密钥发送到<p>标签

时间:2018-04-17 12:12:38

标签: c# selenium selenium-webdriver xpath webdriver

我想在textarea中发送密码“description”。我已经尝试了所有可能的方法但是没有用。

元素的HTML:

<div class="ta-scroll-window ng-scope ta-text ta-editor form-control" ng-hide="showHtml">
  <div class="popover fade bottom" style="max-width: none; width: 305px;">
    <div class="arrow"></div>
    <div class="popover-content"></div>
  </div>
  <div class="ta-resizer-handle-overlay">
    <div class="ta-resizer-handle-background"></div>
    <div class="ta-resizer-handle-corner ta-resizer-handle-corner-tl"></div>
    <div class="ta-resizer-handle-corner ta-resizer-handle-corner-tr"></div>
    <div class="ta-resizer-handle-corner ta-resizer-handle-corner-bl"></div>
    <div class="ta-resizer-handle-corner ta-resizer-handle-corner-br"></div>
    <div class="ta-resizer-handle-info"></div>
  </div>
  <div id="taTextElement737852736512107" contenteditable="true" ta-bind="ta-bind" ng-model="html" ta-keep-styles="true" class="ng-pristine ng-valid ta-bind ng-empty ng-touched" an-form-object-name="Açıklama" name="Açıklama">
    <p>
      <br>
    </p>
  </div>
</div>

代码试用:

Dim action2 = New Actions(driver)
Dim cekbul2 = driver.FindElement(By.XPath("//*@id=""taHtmlElement737852736512107""]"))
cekbul2.SendKeys("Açıklama")
Console.Write("textarea send description")

 Dim cekbul2 = driver.FindElement(By.XPath("//textarea[@class='ng-pristine ng-untouched ng-valid ng-scope ta-bind ta-html ta-editor form-control ng-empty ng-hide' and @id='taHtmlElement737852736512107']"))

错误是:

"no such element: Unable to locate element does not work"  give error

3 个答案:

答案 0 :(得分:0)

你的html里面没有文本区域输入字段。 当你使用xPath说 &#39; // textarea的&#39;这意味着您正在寻找标签为<textarea> </textarea>

的元素

看起来你的html实际上是看起来像文本区域的div。 这就是为什么你的第二次尝试永远不会起作用的原因 - 因为你正在寻找一个不存在的textarea。

通常,在将div设置为像文本区域或文本框一样工作的情况下,您会发现div后面有一个支持输入。 这些必须位于 html中的<form> and </form>标签 - 否则服务器永远无法接收数据。 (Html 5提供了使用它的新方法 - 但这是另一个故事) 你能检查你的完整html,看看你是否能找到最终包含文本内容的实际文本区域对象或输入类型对象。 键入一些虚拟文本,并使用chrome或firefox中的html检查器工具查找您的虚拟文本。

但是,如果帖子是通过javascript完成的 - 您可能会发现javascript不使用输入或文本区域来包含文本,而是将其发布到任何表单元素的外部。这在富文本模拟器(如论坛帖子页面)中很常见。

如果是这种情况 - 您可能需要尝试并找到需要发送密钥的相应html元素才能使内容生效。 另外 - 你可以尝试

Dim cekbul2 = driver.FindElement(By.XPath("//div[@id='taHtmlElement737852736512107']"))

我无法帮助但是注意到它有一个xPath语法错误 - 你没有开始[方括号] - 另外,在编程中,它有时被认为是一种不好的做法,通配符/使用动态。我建议始终使用xpath的标记类型,而不是&#39; // *&#39;

更糟糕的情况是,我会说你可以通过使用Javascript执行来解决这个问题。例如:直接设置文字,而不是发送按键笔划&#39;。 然而,这并不能模仿人类的行为 - 但根据你的情况,它可能是一种必要的邪恶。

答案 1 :(得分:0)

要将文字发送到<p>代码,您必须使用ExecuteScript()界面中的IJavaScriptExecutor方法,您可以使用以下代码块:

((IJavaScriptExecutor)driver).ExecuteScript("document.getElementsByTagName("p")[0].innerHTML="Hasan Sarıkaya";");

答案 2 :(得分:0)

我想在此强调一些观点

您使用的定位器很可能不正确。

我知道使用selenium输入文本有三种方法

1)使用driver.findElement(yourLoator).sendKeys(“Stringvalue”);

2) 您可以使用操作类发送密钥

3)您可以使用javascript执行程序更改innerHtml代码

个人生病不喜欢第三种解决方案,因为我们是测试人员,我相信改变dom属性是一种很好的做法

希望这会给你一些帮助。如果有任何疑问,请告诉我。