首页 > 解决方案 > 如何使用 selenium webdriver 将文本背景标记为蓝色,类似于将鼠标拖到文本上)?

问题描述

我有一个 HTML 元素,如下所示:

<td title="11607" style="text-overflow:ellipsis;white-space:nowrap;">11607</td>

我用来查找元素的定位器是:

string number= "11607";
IWebElement element = DriverUser.FindElement(By.XPath(string.Format("//*[contains(text(),'{0}')]" , number)));

我想使用 selenium 网络驱动程序标记文本 11607,

在搜索了很长时间后,我找到了 2 个解决该问题的方法;第一个解决方案似乎是最合适的,但对我不起作用。我想知道是因为 HTML 标签是 TD 还是因为它不是正确的解决方案。另一个解决方案有效,但我想改进它。

我将在下面详细说明:

  1. 第一个解决方案是:(取自Highlight text using Selenium
public static void HighlightText(this IWebElement element)
        {
            element.Click();
            Actions actions = new Actions(Driver);
            actions.SendKeys(Keys.Home).Build().Perform();
            int length = element.Text.Length;
            actions.KeyDown(Keys.LeftShift);
            for(int i = 0 ; i < length ; i++)
            {
                actions.SendKeys(Keys.ArrowRight);
            }
            actions.KeyUp(Keys.LeftShift);
            actions.Build().Perform();
        }

当我运行它时,它什么也没做。


也许是因为我的标签是 TD 标签而不是 INPUT 或类似的东西?

  1. 第二种解决方案是:(取自https://www.edgewordstraining.co.uk/2018/02/23/highlighting-web-elements/,并出现在其他地方)
        public static void HighlightTextJS(this IWebElement element)
        {
            var jsDriver = ( IJavaScriptExecutor ) Driver;
            string highlightJavascript = @"$(arguments[0]).css({ ""background"" : ""DodgerBlue""});";
            jsDriver.ExecuteScript(highlightJavascript , new object[] { element });
        }

它标记了元素的所有背景,而不仅仅是字母。我想准确地模拟在文本上拖动鼠标光标。

根据随附的屏幕截图,我得到了像第一行(11604)这样的视图,但对像第二行(11602)这样的视图感兴趣

将文本标记为蓝色



也许有一个属性我可以添加到 CSS 中来模拟它?




此外,我尝试了通过 SendKeys 发送一些密钥的选项:

Actions actions = new Actions(Driver);
                actions.MoveToElement(element);
                actions.SendKeys(Keys.Shift + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft);
                actions.Build().Perform();

这也是:

 Actions actions = new Actions(Driver);
                actions.SendKeys(element, Keys.Shift + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft + Keys.ArrowLeft);
                actions.Build().Perform();

它仍然没有工作。

谢谢你的帮助!!!

标签: c#cssseleniumwebdriver

解决方案


我为您找到了解决方案的 C# 语法。

new Actions(Driver).MoveToElement(element, 1, 1).ClickAndHold().MoveToElement(element, element.Size.Width-1, 1).Release().Perform();

在您的尝试中,它从元素的中心开始,直到从元素的中心计算出的元素宽度。但这应该从元素的左上角开始,直到元素的宽度。
希望这对你有用。


推荐阅读