我正在尝试自动化Amazon.in的搜索框,当我尝试在那里输入一些字符串时,它指向浏览器的地址栏。我的代码相同。
注意 - 我已经尝试过使用firebug和标记遍历的不同xpath。
另外请告诉我为什么我们必须使用始终构建和执行操作的方法?
public static void main(String args[])
{
WebDriver driver= new FirefoxDriver();
driver.get("http://amazon.in");
Actions action=new Actions(driver);
WebElement element= driver.findElement(By.xpath(".//*[@id='nav-link-yourAccount']/span[2]"));
action.moveToElement(element).build().perform();
WebElement search= driver.findElement(By.xpath(".//*[@id='twotabsearchtextbox']"));
action.keyDown(Keys.SHIFT).moveToElement(search).sendKeys("teststring").build().perform();
action.contextClick(search).build().perform();
}
答案 0 :(得分:-1)
public static void main(String args[]) {
WebDriver driver = new FirefoxDriver();
driver.get("http://amazon.in");
driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
Actions action = new Actions(driver);
WebElement search = driver.findElement(By.xpath(".//*[@id='twotabsearchtextbox']"));
//Search using actions by combining entering search string and then hit enter
action.click(search).sendKeys("Test").sendKeys(Keys.RETURN).build().perform();
// This also works where it does the same without actions class
search.sendKeys("test");
search.sendKeys(Keys.RETURN);
}
在您的代码中:
下面的行将teststring输入浏览器搜索而不是亚马逊搜索栏,因为您只是移动到该元素而不是单击它。 action.keyDown(Keys.SHIFT).moveToElement(search).sendKeys("teststring").build().perform();
这就像点击右键/上下文点击搜索栏一样
action.contextClick(search).build().perform();
来自API doc:
build()生成一个包含目前为止所有操作的复合操作, 准备好执行(并重置内部构建器状态,所以 后续对build()的调用将包含新的序列。
perform()用于执行动作的便捷方法 首先调用build()