硒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"><p></span>Hallo<span class="cm-tag"></p></span>
</pre>
<pre>
<span class="cm-tag"><h1></span>Test<span class="cm-tag"></h1></span>
</pre>
<pre>
<span class="cm-tag"><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">></span>
This is the editor an how it works<span class="cm-tag"></h5></span>
</pre>
<pre>
</pre>
<pre>
</pre>
<pre>
</pre>
</div>
我没有找到 "good" 方法,所以我制作了一个按 CTRL + V 的机器人,它成功了。
我使用 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"><p></span>Hallo<span class="cm-tag"></p></span>
</pre>
<pre>
<span class="cm-tag"><h1></span>Test<span class="cm-tag"></h1></span>
</pre>
<pre>
<span class="cm-tag"><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">></span>
This is the editor an how it works<span class="cm-tag"></h5></span>
</pre>
<pre>
</pre>
<pre>
</pre>
<pre>
</pre>
</div>
我没有找到 "good" 方法,所以我制作了一个按 CTRL + V 的机器人,它成功了。