java - 硒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"><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>
解决方案
我没有找到“好”的方法,所以我制作了一个按 CTRL + V 的机器人,它起作用了。
推荐阅读
- python - Python:尝试使用 requests.post 时获取“internalServerError:500”
- stripe-payments - 电子商务支付网关 - 资金从一个客户转移到另一个客户
- google-sheets - 如何在下拉列表中的项目来自列的 Google Data Studio 中添加过滤器
- python - 检查熊猫中的元组列是否包含列表中的某些值
- python - 如何将scrapy spider导入另一个代码
- python - 在 Python 中使用 lambda 更改最小化标量以最大化
- android - Android布局动画过渡
- c# - 从字符串中删除不需要的 Unicode 字符
- javascript - Lance Pong 示例在浏览器中不起作用:缺少“bundle.js”
- sse - 使用 AVX/AVX2/SSE __m128i 将所有负数字节设置为 -128 (0x80) 并保留所有其他字节