Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Highlight text using Selenium

I have a context sensitive menu that needs text to be hightlighted in order for it to work. However, I'm having problems with selecting the text using Selenium. I start by finding the WebElement I'm looking for, before trying to interact with it using the different mouse events available.

When I'm trying to select parts of the text, it doesn't appear to do anything other than placing the marker at the end of the string. This is what my textbox looks like: Trying to select parts of the text in code

This is what I need it to look like, or in other words, what I need Selenium to select (Just did it manually for the purpose of illustration:

Selected text manually

This is along the lines of what I'm trying to do in code:

public static async Task HighlightElementByCssSelector(this RemoteWebDriver @this, string cssSelector, TimeSpan? timeout = null, TimeSpan? interval = null)
{
    var element = await @this.FindElementByCssSelectorAsync(".testmarker-registryentryedit .testmarker-title-field");
    Actions action = new Actions(@this).MoveToElement(element).ClickAndHold(element).MoveByOffset(10,0).Release();
    action.Build().Perform();
}

@this represents the Driver in this case, and the FindElementByCssSelectorAsync being part of a 'wrapper-framework'. I've tried different combinations of MoveToElement, DragAndDrop, ClickAndHold etc, but I just can't get it to work. Any pointers as to what might be wrong here?

like image 213
Nicklas Pouey-Winger Avatar asked Mar 15 '23 08:03

Nicklas Pouey-Winger


1 Answers

According to what I understood about your problem I tried to solve it on my local machine (first day of vacation, lol). Sorry, I don't have VS on that machine so I wrote it in Java. The code should be self-explanatory:

@org.junit.Test
public void doTest(){
    String query = "This is a test";
    WebDriver driver = new FirefoxDriver();
    driver.get("https://www.google.com");
    WebElement searchBox = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.id("lst-ib")));
    searchBox.sendKeys(query);

    // make sure it has focus
    searchBox.click();

    Actions actions = new Actions(driver);
    // go to the beginning of input
    actions.sendKeys(Keys.HOME).build().perform();
    int length = query.substring(0, query.indexOf("a")).length();

    actions.keyDown(Keys.LEFT_SHIFT);
    for (int i = 0; i < length; i++){
        actions.sendKeys(Keys.ARROW_RIGHT);
    }
    actions.keyUp(Keys.LEFT_SHIFT);
    actions.build().perform();
}

Results in:

Result

Is this what you wanted?

like image 112
Erki M. Avatar answered Mar 25 '23 09:03

Erki M.