Javascript 使用Selenium突出显示WebElement并恢复原始边框?
我偶然发现了这个答案,并试图弄清楚Javascript 使用Selenium突出显示WebElement并恢复原始边框?,javascript,java,selenium,Javascript,Java,Selenium,我偶然发现了这个答案,并试图弄清楚SCRIPT\u GET\u ELEMENT\u BORDER和SCRIPT\u UNHIGHLIGHT\u ELEMENT是如何实例化的 我觉得这篇文章对熟悉JS的人来说是有意义的,但遗憾的是,我从来没有被它弄脏过。我试图做的基本上是重新创建这个答案,但考虑到我的应用程序。我所做的是扩展Selenium的FirefoxDriver以覆盖FindElement函数。在新函数中,突出显示并记住找到的WebElement。再次调用函数时,记忆元素的边框设置为none
SCRIPT\u GET\u ELEMENT\u BORDER
和SCRIPT\u UNHIGHLIGHT\u ELEMENT
是如何实例化的
我觉得这篇文章对熟悉JS的人来说是有意义的,但遗憾的是,我从来没有被它弄脏过。我试图做的基本上是重新创建这个答案,但考虑到我的应用程序。我所做的是扩展Selenium的FirefoxDriver
以覆盖FindElement
函数。在新函数中,突出显示并记住找到的WebElement
。再次调用函数时,记忆元素的边框设置为none
。正如答案所指出的,它删除了原始边框。我希望在高亮显示完成后保留原始边框
这是到目前为止我的班级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
时,它返回一个表示其当前边框的字符串。然后按照下面的方式使用它
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;
}
}
我猜在上面的链接答案下,我看不出回答者如何从脚本\u GET\u元素\u BORDER
下显示的JS到表示边框的字符串?方法,该方法返回任何web元素的样式。BORDER
值:
private String getElementBorder(WebElement elem)
{
return (String) ((JavascriptExecutor)this).executeScript("return arguments[0].style.border", elem);
}
是否要突出显示与自定义findElement
方法一起使用的所有web元素,还是要为任何web元素创建一个返回style.border
值的方法?我要突出显示使用自定义findElement
方法找到的最后一个WebElement
,并创建一个返回值的自定义方法给定的WebElement
的style.border
。第一部分是“完成”的,但依赖于自定义方法正常工作这一事实。当前,自定义方法返回null
,但应将样式.border
作为字符串返回,该字符串可在方法中使用。我假设这与链接的问题有关,但我不知道在Q中,它们是如何从给定的JS到表示样式的字符串的。我会很快在这里试用,并让你知道。谢谢一个注意事项-您需要将值转换为字符串