Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Selenium突出显示WebElement并恢复原始边框?_Javascript_Java_Selenium - Fatal编程技术网

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到表示
样式的
字符串的。我会很快在这里试用,并让你知道。谢谢一个注意事项-您需要将值转换为字符串