У меня есть элемент 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 или с неправильным решением.Другое решение сработало, но я бы хотел его улучшить.
Я подробно опишу ниже:
- Первое решение: (взято из Выделение текста с помощью 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 для имитации? Дополнительно Я попытался отправить несколько ключей с помощью 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();
Это все еще не работало.
Спасибо за помощь !!!