30秒后超时,等待位于的元素存在

时间:2016-08-22 10:02:09

标签: selenium selenium-webdriver

我的下面的代码工作正常但现在,我正在及时响应。我不知道如何处理这个超时问题 - 请提出建议。

public void Browse_Samsung() throws Exception 
    {
        WebDriverWait wait = new WebDriverWait(driver, 30);
        Actions act = new Actions(driver);
        act.moveToElement(Digital_Menu).perform();
        act.click(wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='CategoryMenu1']//a[@title='Samsung']")))).build().perform();

        WebElement Micromax = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='filter_1Option_21']//a[@title='GSM Mobile Phones - Micromax']")));

        JavascriptExecutor js = (JavascriptExecutor)driver;
        js.executeScript("arguments[0].scrollIntoView(true);arguments[0].click()", Micromax);

    }
}

场景:

  1. 登录www.homeshop18.com
  2. 从“数字”菜单中选择“三星”
  3. 现在从左侧显示的“品牌”部分 我需要滚动并选择另一个名为“Micromax”的品牌。
  4.   

    错误:   org.openqa.selenium.TimeoutException:30秒后超时等待位于以下位置的元素:By.xpath:// * [@ id ='filter_1Option_21'] // a [@ title ='GSM手机 - Micromax' ]

2 个答案:

答案 0 :(得分:1)

您的xpath上有错误的ID:

//*[@id='filter_1Option_21']//a[@title='GSM Mobile Phones - Micromax']

您应该使用 filter_1Option_20 ,但最好使用xpath:

//li/a[@title='GSM Mobile Phones - Micromax']

我认为您的过滤器ID不是常量,因此最好不要在xpath中使用ID。

答案 1 :(得分:0)

试试这个,它完全适合我。我可以点击“Micromax”

Actions action = new Actions(driver);

action.moveToElement(driver.findElement(By.linkText("Digital"))).build().perform();

WebDriverWait wait = new WebDriverWait(driver,30);

wait.until(ExpectedConditions.visibilityOfElementLocated(By.linkText("Samsung")));

driver.findElement(By.linkText("Samsung")).click();

driver.findElement(By.xpath("//input[@class='input inputBox_filter_Brand']")).sendKeys("Micromax");

WebDriverWait wait1= new WebDriverWait(driver,30);

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[@title='GSM Mobile Phones - Micromax']")));

driver.findElement(By.xpath("//a[@title='GSM Mobile Phones - Micromax']")).click();