硒Java。将文本放在 div 元素中:元素不可交互

Selenium Java. Put text in a div element: element not interactable

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

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

的前置元素

我的问题:没有像输入框那样的 HTML 元素,但您可以在其中正常写入。该代码将您的小费文本保存在 div 中,并且其中有 pre 元素。 Confluence 将文本逐行放入 span 元素并将其拆分为不同的部分(我不知道确切的逻辑,但我认为如果有新的片段或 space 等,它就会拆分)。正因为如此,我不能把它建得一样,而且它也需要很长时间。我将使用 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");

但是我得到一个错误:

Exception in thread "AWT-EventQueue-0" org.openqa.selenium.ElementNotInteractableException: element not interactable

我不知道为什么编辑器在范围内,但什么都没有。而且,我做的时候可以 "normal".

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

 //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>

我没有找到 "good" 方法,所以我制作了一个按 CTRL + V 的机器人,它成功了。