在运行代码时,查找webelement始终会失败,但会以调试模式传递

时间:2016-09-20 05:57:01

标签: java selenium-webdriver

在下面的代码中,我传递了urltag

tag用于标识页面中的div /部分。我试图将所有url置于一个部分下,并与传递的url进行比较并尝试匹配。

这里的问题是当我在调试模式下运行此代码时,我能够获取一个网址列表并在列表中找到匹配的url,但是当我运行下面的代码时assert语句始终无法在列表中找到url。我通过引入web元素等待以及其他sleep方法尝试了我的最佳解决方案。似乎没有什么工作。你能帮我解决这个问题吗?

代码

public void validateEndpoints(String url, String tag){
    tag = tag.trim();
    if(tag.contains("/"))
        tag = tag.replace("/", "_");

    WebElement resourceLink = driver.findElement(By.cssSelector("#resource_"+tag+"_"+" .heading a"));
    WebDriverWait wait = new WebDriverWait(driver, 20);
    wait.until(ExpectedConditions.elementToBeClickable(resourceLink));
    JavascriptExecutor executor = (JavascriptExecutor)driver;
    executor.executeScript("arguments[0].click();", resourceLink);

    By mySelector = By.cssSelector("#"+tag+"__endpoint_list .path a");  
    WebDriverWait wait2 = new WebDriverWait(driver, 30);
    wait2.until(ExpectedConditions.elementToBeClickable(mySelector));
    List<WebElement> urlList = driver.findElements(mySelector);

    List<String> resourceName = new ArrayList<String>();

    for (WebElement e : urlList){ 
        resourceName.add(e.getText());          
    }
    executor.executeScript("arguments[0].click();", resourceLink);
    Assert.assertTrue(resourceName.contains(url), "End point "+ url +" not found in the resource " + tag + "...");      
}

1 个答案:

答案 0 :(得分:0)

对URL也使用显式等待

List<WebElement> urlList = wait2.until(ExpectedConditions.presenceOfAllElementsLocatedBy(mySelector));