等待不起作用但thread.sleep正在工作,也没有在selenium中抛出异常

时间:2018-02-06 20:29:04

标签: selenium

//Thread.sleep(300);

Actions action = new Actions(driver);
        WebDriverWait wait3 = new WebDriverWait(driver, 60);
        wait3.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='toggleNav']/li[2]/a")));
        WebElement we = driver.findElement(By.xpath(".//*[@id='toggleNav']/li[2]/a"));
        action.moveToElement(we).perform();

WebDriverWait wait4 = new WebDriverWait(driver, 60);
        wait4.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='toggleNav']/li[2]/ul/li[3]/a")));
        WebElement we1 = driver.findElement(By.xpath("//*[@id='toggleNav']/li[2]/ul/li[3]/a"));
        action.moveToElement(we1).click().build().perform();

使用thread.sleep它可以正常工作,但是在使用时等待它不执行动作,也不会抛出任何未找到的元素异常......

FYI也使用了Java脚本,在这种情况下,当注释thread.sleep时它不起作用

//了Thread.sleep(300);

    Actions action = new Actions(driver);

    WebElement we = driver.findElement(By.xpath(".//*[@id='toggleNav']/li[2]/a"));
    JavascriptExecutor executor = (JavascriptExecutor)driver;
    executor.executeScript("arguments[0].click();", we);
//  action.moveToElement(we).perform();


    WebElement we1 = driver.findElement(By.xpath("//*[@id='toggleNav']/li[2]/ul/li[3]/a"));
    JavascriptExecutor executor1 = (JavascriptExecutor)driver;
    executor1.executeScript("arguments[0].click();", we1);
    //action.moveToElement(we1).click().build().perform();

1 个答案:

答案 0 :(得分:0)

而不是使用

wait.until(ExpectedConditions.presenceOfElementLocated(By....)

使用

wait.until(ExpectedConditions.elementToBeClickable(By....)

这样你就可以在继续之前等待找到的元素可点击。