5

我正在尝试使用 C# 突出显示在 selenium webdriver 中找到的(围绕边界)元素。我在网上搜索了所有我发现的都是 java 代码,但在 C# 中需要它。

或者有没有其他方法可以做到这一点。

谢谢

4

4 回答 4

8

没有本地方法可以做到这一点,但因为 Selenium 允许您使用执行 Javascript,您只需多做一点工作即可完成它:

因此问题变成了“如何在 Javascript 中更改元素边框?”

如果您使用 jQuery,它会更容易一些,您可以找到元素,然后设置一些边框属性。jQuery 有一个简洁的小css属性,允许您传入一个JSON值字典,它会为您处理所有设置,一个示例如下:

jQuery('div.tagged > a:first').css({ "border-width" : "2px", "border-style" : "solid", "border-color" : "red" });

这将找到一个元素,并将其边框设置solid2px宽,边框颜色为red.

但是,如果您已经拥有IWebElement该元素的实例(很可能),您可以从 jQuery/Javascript 中承担“查找”的职责,并使其再次变得更简单。

这将执行如下:

var jsDriver = (IJavaScriptExecutor)driver;
var element = // some element you find;
string highlightJavascript = @"$(arguments[0]).css({ ""border-width"" : ""2px"", ""border-style"" : ""solid"", ""border-color"" : ""red"" });";
jsDriver.ExecuteScript(highlightJavascript, new object[] { element });

如果您只想要基本的 Javascript,那么您可以使用该.cssText属性,它允许您提供完整的 CSS 样式字符串,而不是单独添加它们(尽管我不知道跨浏览器对它的支持程度):

var jsDriver = (IJavaScriptExecutor)driver;
var element = // some element you find;
string highlightJavascript = @"arguments[0].style.cssText = ""border-width: 2px; border-style: solid; border-color: red"";";
jsDriver.ExecuteScript(highlightJavascript, new object[] { element });

(虽然有更多的方法,但我只是用最冗长的方式让它更清楚)

于 2013-09-13T10:55:59.160 回答
4

C# 扩展方法:3 秒内高亮和清除。

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Remote;
using System.Reactive.Linq;

public static class SeleniumUtil
{
   public static void Highlight(this  IWebElement context)
    {
        var rc = (RemoteWebElement)context;
        var driver = (IJavaScriptExecutor)rc.WrappedDriver;
        var script = @"arguments[0].style.cssText = ""border-width: 2px; border-style: solid; border-color: red""; ";
        driver.ExecuteScript(script, rc);
        Observable.Timer(new TimeSpan(0, 0, 3)).Subscribe(p =>
        {
            var clear = @"arguments[0].style.cssText = ""border-width: 0px; border-style: solid; border-color: red""; ";
            driver.ExecuteScript(clear, rc);
        });
    }
}
于 2015-11-13T19:09:36.560 回答
3

谢谢阿兰,我刚刚修改了您的答案..

var jsDriver = (IJavaScriptExecutor)driver;
var element = //element to be found
string highlightJavascript = @"arguments[0].style.cssText = ""border-width: 2px; border-style: solid; border-color: red"";";
jsDriver.ExecuteScript(highlightJavascript, new object[] { element });

它工作得很好......再次感谢。

于 2013-09-13T12:13:09.290 回答
0

在您的 Class 文件中编写下面的 JavaScript 执行器代码

public void elementHighlight(WebElement element) {
            for (int i = 0; i < 2; i++) {
                JavascriptExecutor js = (JavascriptExecutor) driver;
                js.executeScript(
                        "arguments[0].setAttribute('style', arguments[1]);",
                        element, "color: red; border: 5px solid red;");
                js.executeScript(`enter code here`
                        "arguments[0].setAttribute('style', arguments[1]);",
                        element, "");
            }

从 Selenium 测试用例调用上述方法以突出显示网页元素。查看下面的代码,它显示了它是如何完成的。elementHighlight 方法以 searchBox 作为参数调用。

@Test
    public void GoogleSearch() throws Exception, SQLException {

        driver.findElement(By.xpath("//center/div[2]")).click();
        WebElement searchBox = driver.findElement(By.xpath("//div[3]/div/input"));
        elementHighlight(searchBox);
        driver.findElement(By.xpath("//div[3]/div/input")).clear();
        driver.findElement(By.xpath("//div[3]/div/input")).sendKeys("Test");
        driver.findElement(By.xpath("//button")).click();

    }

在执行上述测试时,Selenium 测试将突出显示 Google 主页上的搜索框。您可以重用 elementHighlight 方法来突出显示网页上的任何元素。

于 2015-05-16T11:25:41.820 回答