我偶然发现了这个SO回答https://stackoverflow.com/a/10660734/2985796,并试图了解SCRIPT_GET_ELEMENT_BORDER
和SCRIPT_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" } )
的?
答案 0 :(得分:2)
为任何网络元素返回style.border
值的方法:
private String getElementBorder(WebElement elem)
{
return (String) ((JavascriptExecutor)this).executeScript("return arguments[0].style.border", elem);
}