gpt4 book ai didi

javascript - 使用 Selenium 突出显示 WebElement 并恢复原始边框?

转载 作者:行者123 更新时间:2023-12-02 04:05:42 26 4
gpt4 key购买 nike

我偶然发现了这个答案 https://stackoverflow.com/a/10660734/2985796我正在尝试了解 SCRIPT_GET_ELEMENT_BORDERSCRIPT_UNHIGHLIGHT_ELEMENT 是如何实例化的。

我觉得这篇文章对于熟悉 JS 的人来说是有意义的,但遗憾的是我从未亲自接触过它。我想做的基本上是根据我的应用程序重新创建这个答案。我所做的是扩展 Selenium 的 FirefoxDriver 来覆盖 FindElement 函数。在新函数中,找到的 WebElement 会突出显示并被记住。当再次调用该函数时,记住的元素的边框设置为none。正如答案所指出的,这会删除原始边框。我想在突出显示完成后保留原始边框。

到目前为止,这是我的类(class)FirefoxDriverEx

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class FirefoxDriverEx extends FirefoxDriver
{
private WebElement LastHighlightedElement = null;

private static final String HIGHLIGHT_BOARDER_JS = "arguments[0].style.border='3px solid red'";
private static final String UNHIGHLIGHT_BOARDER_JS = "arguments[0].style.border='none'";

@Override
public WebElement findElement(By by)
{
UndoHighlight();
WebElement foundElement = super.findElement(by);
if (this instanceof JavascriptExecutor)
{
((JavascriptExecutor)this).executeScript(HIGHLIGHT_BOARDER_JS, foundElement);
LastHighlightedElement = foundElement;
}
return foundElement;
}

private void UndoHighlight()
{
if(LastHighlightedElement != null)
{
try
{
if (this instanceof JavascriptExecutor)
((JavascriptExecutor)this).executeScript(UNHIGHLIGHT_BOARDER_JS, LastHighlightedElement);
LastHighlightedElement = null;
}
catch(Exception ex) { }
}
}
}

我想做的是创建一个函数GetElementBorder,当传递WebElement时,它返回一个表示其当前边框的String。然后按照下面的方式使用它。

public class FirefoxDriverEx extends FirefoxDriver
{
private String LastElementBorder = null;
private WebElement LastHighlightedElement = null;

private static final String HIGHLIGHT_BOARDER_JS = "arguments[0].style.border='3px solid red'";

@Override
public WebElement findElement(By by)
{
UndoHighlight();
WebElement foundElement = super.findElement(by);
if (this instanceof JavascriptExecutor)
{
((JavascriptExecutor)this).executeScript(HIGHLIGHT_BOARDER_JS, foundElement);
LastElementBorder = GetElementBorder(foundElement);
LastHighlightedElement = foundElement;
}
return foundElement;
}

private void UndoHighlight()
{
if(LastHighlightedElement != null && LastElementBorder != null)
{
try
{
String setLastBorderJS = "arguments[0].style.border='" + LastElementBorder + "'";
if (this instanceof JavascriptExecutor)
((JavascriptExecutor)this).executeScript(setLastBorderJS, LastHighlightedElement);
LastHighlightedElement = null;
LastElementBorder = null;
}
catch(Exception ex) { }
}
}

private String GetElementBorder(WebElement elem)
{
return null;
}
}

我想在上面链接的答案下,我看不到应答者如何从 SCRIPT_GET_ELEMENT_BORDER 下显示的 JS 到表示边框的 String

最佳答案

返回任何 Web 元素的 style.border 值的方法:

private String getElementBorder(WebElement elem)
{
return (String) ((JavascriptExecutor)this).executeScript("return arguments[0].style.border", elem);
}

关于javascript - 使用 Selenium 突出显示 WebElement 并恢复原始边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34300757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com