Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to manipulate user selected text using webdriver?

Lets say i have the following snippet in my web page:

<p> This is some text </p>

I want WebDriver to select "some" in this text, as if the user selected it. How should i do this? I know how to get the <p>-element:

WebElement editable = getDriver().findElement(By.id("someId"));
editable = editable.findElement(By.tagName("p"));
System.out.println(p.getText());

The println prints "This is some text".

I tried sending keys to the element, and that used to work(in selenium 2.0b), but i'm using selenium 2.6.0 now, and it stopped working:

editable.sendKeys(Keys.chord(Keys.SHIFT, Keys.LEFT));

Does anyone have ideas? I'm using the FirefoxDriver.

like image 254
bspoel Avatar asked Sep 22 '11 14:09

bspoel


1 Answers

I did this once for Firefox using Javascript. Basically I used the range object in Firefox to select the text. Change the start and end range index based on what you want to select. This would not work in IE, because selecting range is conceptually different in IE. I don't have the IE code handy but since you are concerned about FF, you could give this a shot. Let me know if you interested in IE text range.

String script = "var range = document.createRange();" +
"var start = document.getElementById('idofthedivthatcontainstext');" +
"var textNode = start.getElementsByTagName('p')[0].firstChild;" +
"range.setStart(textNode, 8);" +
"range.setEnd(textNode, 13);" +
"window.getSelection().addRange(range);";
 ((JavascriptExecutor)driver).executeScript(script);
like image 79
nilesh Avatar answered Oct 01 '22 06:10

nilesh