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

时间:2015-12-15 22:35:43

标签: javascript java selenium

我偶然发现了这个SO回答https://stackoverflow.com/a/10660734/2985796,并试图了解SCRIPT_GET_ELEMENT_BORDERSCRIPT_UNHIGHLIGHT_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,当传递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

我想根据上面的链接答案,我不知道回答者是如何从String下面显示的JS到代表边界的db.users.find( { 'emails.address' : "brutus@example.com" } ) 的?

1 个答案:

答案 0 :(得分:2)

为任何网络元素返回style.border值的方法:

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