使用 Selenium 突出显示文本
Highlight text using Selenium
我有一个上下文相关菜单,需要突出显示文本才能使其正常工作。但是,我在使用 Selenium selecting 文本时遇到问题。我首先找到我正在寻找的 WebElement,然后尝试使用可用的不同鼠标事件与其交互。
当我尝试 select 部分文本时,除了将标记放在字符串的末尾之外,它似乎没有做任何事情。
这是我的文本框的样子:
这就是我需要它的样子,或者换句话说,我需要 Selenium 来 select(只是为了说明的目的手动完成:
这与我在代码中尝试做的事情一致:
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
是 'wrapper-framework' 的一部分。
我已经尝试了 MoveToElement、DragAndDrop、ClickAndHold 等的不同组合,但我就是无法让它工作。关于这里可能有什么问题的任何指示?
根据我对你的问题的了解,我尝试在我的本地机器上解决它(假期的第一天,哈哈)。对不起,我那台机器上没有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();
}
结果:
这是你想要的吗?
我有一个上下文相关菜单,需要突出显示文本才能使其正常工作。但是,我在使用 Selenium selecting 文本时遇到问题。我首先找到我正在寻找的 WebElement,然后尝试使用可用的不同鼠标事件与其交互。
当我尝试 select 部分文本时,除了将标记放在字符串的末尾之外,它似乎没有做任何事情。
这是我的文本框的样子:
这就是我需要它的样子,或者换句话说,我需要 Selenium 来 select(只是为了说明的目的手动完成:
这与我在代码中尝试做的事情一致:
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
是 'wrapper-framework' 的一部分。
我已经尝试了 MoveToElement、DragAndDrop、ClickAndHold 等的不同组合,但我就是无法让它工作。关于这里可能有什么问题的任何指示?
根据我对你的问题的了解,我尝试在我的本地机器上解决它(假期的第一天,哈哈)。对不起,我那台机器上没有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();
}
结果:
这是你想要的吗?