2015-07-20 172 views
2

我有一个上下文相关菜单,需要高亮显示文本才能使其正常工作。不过,我在使用Selenium选择文本时遇到问题。在尝试使用可用的不同鼠标事件与它进行交互之前,我首先找到正在查找的WebElement。使用Selenium突出显示文本

当我试图选择部分文本时,除了将标记放置在字符串的末尾之外,它似乎没有做任何其他操作。 这是我的文本框的样子: Trying to select parts of the text in code

这是我需要它的样子,或者换句话说,我需要的硒选择(只需手动这么做是为了说明的目的:

Selected text manually

这是一起什么我想在代码中做线:

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代表了驱动程序这种情况下,和FindElementByCssSelectorAsync是'包装框架'的一部分。 我试过MoveToElement,DragAndDrop,ClickAndHold等不同的组合,但我不能让它工作。任何关于什么可能是错误的指针?

+0

你需要使用鼠标吗?如果不是,您可以尝试使用[Keys]中的和弦方法(https://selenium.googlecode.com/git-history/master/docs/api/java/org/openqa/selenium/Keys.html#chord- java.lang.Iterable-)。或从动作发送keyDown与Shift键,然后sendKeys()用左箭头,然后再keyUp()再次? –

+0

这是一种有效的方法。不需要明确地使用鼠标。仍然不能将标记放置在字符串的开头:( –

+0

)您是否知道该输入中的文本是什么?如果是这样,您可以使用字符串长度和所需值的索引计算乞求并将光标移动到正确的位置使用以前的评论中的方法(无移位) –

回答

3

根据我了解你的问题,我试图解决它在我的本地机器(第一天的假期,哈哈)。对不起,我没有在该机器上的VS,所以我用Java编写了它。代码应该是不言自明:

@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(); 
} 

结果:

Result

这是你想要的吗?