我试图自动执行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();
}

最佳答案

    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文档:


  build()生成一个复合动作,其中包含到目前为止的所有动作,
  准备执行(并重置内部构建器状态,因此
  随后对build()的调用将包含新序列)。
  
  perform()一种方便的方法,无需执行操作即可
  首先调用build()


请阅读以下链接,以获取清晰的图片:
LinkOne
LinkTwo

关于java - Selenium 单击浏览器的URL而不是网站的搜索框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31326191/

10-11 22:34
查看更多