Как пометить фон текста синим цветом, как при наведении курсора мыши на текст) с помощью веб-драйвера selenium? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть элемент 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)));

Я хочу пометить текст 11607, используя сеть селендрайвер,

После долгих поисков я нашел 2 решения проблемы;Первое решение казалось наилучшим, но у меня не получилось.Я хочу знать, связано ли это с HTML-тегом TD или с неправильным решением.Другое решение сработало, но я бы хотел его улучшить.

Я подробно опишу ниже:

  1. Первое решение: (взято из Выделение текста с помощью 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)

mark text as blue Может быть, есть свойство, которое я могу добавить в 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();

Это все еще не работало.

Спасибо за помощь !!!

1 Ответ

0 голосов
/ 27 марта 2019

Я нашел синтаксис C # решения для вас.

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

В вашей попытке он начинается с центра элемента и продолжается до ширины элемента, рассчитанной по центру элемента. Но это должно начинаться с верхнего левого угла элемента и продолжаться до ширины элемента.
Надеюсь, что это работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...