猿问

如何用 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 还是因为它不是正确的解决方案。另一个解决方案有效,但我想改进它。


我将在下面详细说明:


第一个解决方案是:(取自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 或类似的东西?


第二种解决方案是:(取自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 来模拟它?

米琪卡哇伊
浏览 120回答 1
1回答

白板的微信

我为您找到了解决方案的 C# 语法。new&nbsp;Actions(Driver).MoveToElement(element,&nbsp;1,&nbsp;1).ClickAndHold().MoveToElement(element,&nbsp;element.Size.Width-1,&nbsp;1).Release().Perform();在您的尝试中,它从元素的中心开始,直到从元素的中心计算出的元素宽度。但这应该从元素的左上角开始,直到元素的宽度。希望这对你有用。
随时随地看视频慕课网APP
我要回答