如何寻找元素直到结果出现

时间:2019-05-07 12:07:13

标签: java selenium-webdriver

我想自动化一个场景,我需要寻找一个元素直到它出现在结果中,然后单击它。一旦单击它,它将打开一个新窗口。

我做错了什么或我在这里想念什么?

    <div class="result-container">
      <div class="thumbnail" style="">
        <img src="/app/static/img/br_news.png">
      </div>
    <div class="result-content">
      <div class="header">
          <img class="icon" src="/app/static/img/lexis-sm.png">
        <h1 class="title" title="Philips India launches awareness campaign on the World Asthma Day">
            Philips India launches awareness campaign on the World Asthma Day
        </h1>

代码:

@FindBy(how=How.XPATH,using="//div[@class='result-container']")
public List<WebElement> allResultsContainer;
@FindBy(xpath="//div[@class='results']/div[@class='search-results']//div[@class='result-content']")
public static WebElement NewsResults; 
@FindBy(xpath="//span[@class='label']")
public static WebElement searchAuthor;

public void searchforauthoronline() throws InterruptedException { 
    for(WebElement resultElement : allResultsContainer) { 
        log.info("Clicking on original article from search result.");
        resultElement.click(); 
        waitHelper.WaitForElement(searchAuthor, 10); 
        boolean visibility = searchAuthor.isDisplayed();
        if(visibility){ 
            searchAuthor.click(); 
        } 
        else{ 
            System.out.println("Element not present in search result"); 
        }
    }

1 个答案:

答案 0 :(得分:0)

您是否在之前开始循环?

您并没有真正在问题中进行解释,但是根据您的评论,循环仅重复一次。我猜是因为在调用该方法时,只有一个元素可以迭代。

您的问题意味着您需要等待元素显示出来,在这种情况下,for循环是该工作的错误工具。您可能应该使用一个do/while循环,该循环一直循环直到找到可以跳出循环的元素为止。

我还建议添加故障保护条件,以使循环不会永远运行。

在伪代码中,它看起来像这样:

boolean found = false;
int counter = 0;
do {
    sleep for a second
    check the page for all the elements
    if (correctElement.isDisplayed()) {
        correctElement.click();
        found = true;
    }
    counter++;
} while !found && counter <= 30

还有更多的功能,例如重新检查页面上的所有元素并确定正确的元素,但是您应该了解一下。