首页 > 解决方案 > 硒Java。将文本放在 div 元素中:元素不可交互

问题描述

我使用 Selenium,而不是用于网络测试。我用它来获取和更改网站的文本。在用于更改内容的额外编辑器中(在 Confluence 中)。

文本包含不同的格式错误,我想删除/替换它们。(在我的网站上有一个文本编辑器和一个可以编写 HTML 代码的按钮)。我通过使用“innerText”转到开发元素+来获取文本。之后我想更改文本,但它不在输入框中,文本仅包含一个 div,其中包含一些具有跨度元素的预元素

我的问题:没有像输入框这样的 HTML 元素,但你可以正常写在那里。代码将您打赏的文本保存在一个 div 中,并且其中包含 pre 元素。Confluence 将文本行逐行放入 span 元素并将其拆分为不同的部分(我不知道确切的逻辑,但我认为如果有新的片段或空格等它会拆分)。正因为如此,我不能建造它,而且它也需要很长时间。我会用 sendKeys 来做(另一种方法也是可能的,但我不知道。)

HTML 编辑器:[1]:https ://i.stack.imgur.com/6cpo9.png

Java 代码:[1]:https ://i.stack.imgur.com/xl6A4.png

我将这样做://复制文本并通过使用 CONTROLE + A 删除文本并使用 CONTROLE + V 将其放入编辑器中

Clipboard systemClip = Toolkit.getDefaultToolkit().getSystemClipboard(); 

systemClip.setContents(new StringSelection(txt), null); 

text.sendKeys(Keys.CONTROL + "A");

 text.sendKeys(Keys.DELETE); 

text.sendKeys(Keys.CONTROL + "V");

但后来我得到一个错误:

线程“AWT-EventQueue-0”org.openqa.selenium.ElementNotInteractableException 中的异常:元素不可交互

我不知道为什么编辑器在范围内,但什么都没有。此外,当我做“正常”时,它是可能的。

非常感谢您的帮助!!!告诉我怎样才能问得更好!

 //get Text
List<WebElement> getTextWait = (new WebDriverWait(driver, 10)).until(ExpectedConditions.numberOfElementsToBe(By.className("CodeMirror-lines"),1));
List<WebElement> getText = driver.findElements(By.className("CodeMirror-lines"));
WebElement text = getText.get(0);
text.getLocation();
txt = text.getText();
String textString = txt;
System.out.println(txt);

//Funktionsaufruf damit der text geändert wird
Main main = new Main();
if(main.AbsätzeCheckobx.isSelected()) {
  //Absätze werden entfernt
  //Absätze werden gesucht und durch nichts ersetzt
  //Wenn ein doppelter Absatz vorhanden ist wird er hier definiert(das sind alles absätze)
  txt = absätzeEntfernen(txt);
}
if (main.KlammernCheckbox.isSelected()) {
  //Wenn im Word „[…]“ gibst ist in confluence „\[…\]“    PROBLEM: In Wiki markups wird aus „\[…\]“ das „[…]“ und wenn ich dan die backslashes entferne dann fehlen im wiki markup die "[..]" -> Lösung: wiki markup entfernen
  txt = backslashKlammerEntfernen(txt);
}
if (main.DurchgestrichenerTextCheckbox.isSelected()) {
  //Durchgestrichener text: wieder normal ( nicht durchgestrichen)
  txt = duchgestrichenerTextEntfernen(txt);
}
if (main.SternCheckbox.isSelected()) {
  //(*) soll nicht stern werden/ sein
  txt = sternEntfernen(txt);
}
if (main.PfeilCheckbox.isSelected()) {
  // soll zu ->
  txt = pfeilVerbessern(txt);
}
if (main.BackslashCheckbox.isSelected()) {
  //Entfernen von \\
  txt = backslahsEntfernen(txt);
}
if (main.wikiMarkupCheckbox.isSelected()) {
  //Entfernt den Anfang des Markup und die ID muss noch durch ein
  txt = wikiMarkupEntfernen(txt);
}
if (main.wikiMarkupTableCheckbox.isSelected()) {
  //Entfernt wikiMarkups in einer tabelle
  txt = wikiMarkupTableEntfernen(txt);
}
textString = txt;
System.out.println(txt);

//((JavascriptExecutor) driver).executeScript("t1 = document.getElementsByClassName(\"CodeMirror-lines\"); t2 = t1[0];t3 = t2.getElementsByTagName(\"div\");t4 = t3[0]; t4.innerText = '';");
//((JavascriptExecutor) driver).executeScript("t6 = document.getElementById(\"source-editor-wrap-lines\");document.getElementById(\"source-editor-wrap-lines\").checked = true;");

//aktueller error... drückt anscheinend nicht den apply button oder apply wird verhindert oder text wird nicht angenommen und ist vielleicht nocht in datenbank o.ä. gespeichert


Clipboard systemClip = Toolkit.getDefaultToolkit().getSystemClipboard();
systemClip.setContents(new StringSelection(txt), null);

//Click on the first span Element to set focus
List<WebElement> SpanElementList = driver.findElements(By.className("CodeMirror-lines"));
WebElement SpanElement = SpanElementList.get(0);
List<WebElement> divElementList = SpanElement.findElements(By.tagName("div"));
WebElement divElement = divElementList.get(0);
List<WebElement> div2ElementList = divElement.findElements(By.tagName("div"));
WebElement div2Element = div2ElementList.get(2);
List<WebElement> preElementList = div2Element.findElements(By.tagName("pre"));
WebElement preElement = preElementList.get(0);
List<WebElement> span2ElementList = preElement.findElements(By.tagName("span"));
WebElement span2Element =span2ElementList.get(0);
span2Element.click();


text.sendKeys(Keys.CONTROL + "A");
text.sendKeys(Keys.DELETE);
text.sendKeys(Keys.CONTROL + "V");

HTML 代码:

<div style="">
  <pre>
    <span class="cm-tag">&lt;p&gt;</span>Hallo<span class="cm-tag">&lt;/p&gt;</span>
  </pre>
  <pre>
    <span class="cm-tag">&lt;h1&gt;</span>Test<span class="cm-tag">&lt;/h1&gt;</span>
  </pre>
  <pre>
    <span class="cm-tag">&lt;h5</span>
    <span class="cm-attribute">id</span>
    =<span class="cm-string">"id"</span> 
    <span class="cm-attribute">class</span>
    =<span class="cm-string">"class"</span>
    <span class="cm-tag">&gt;</span> 
       This is the editor an how it works<span class="cm-tag">&lt;/h5&gt;</span>
  </pre>
  <pre> 
  </pre>
  <pre> 
  </pre>
  <pre>
  </pre>
</div>

标签: javahtmlseleniumweb-testing

解决方案


我没有找到“好”的方法,所以我制作了一个按 CTRL + V 的机器人,它起作用了。


推荐阅读