как искать элемент пока присутствует в результатах - PullRequest
0 голосов
/ 07 мая 2019

Я хочу автоматизировать сценарий, в котором мне нужно отыскивать элемент, пока он не появится в результате, и после этого щелкните по нему. Как только щелкните по нему, откроется новое окно.

Что я делаю не так или чего мне здесь не хватает?

    <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 голосов
/ 07 мая 2019

Вы ждете до запуска цикла?

Вы действительно не объяснили в вопросе, но, согласно вашему комментарию, цикл повторяется только один раз.Я предполагаю, потому что во время вызова метода есть только один элемент для итерации.

Ваш вопрос подразумевает, что вам нужно подождать, пока элемент не появится, и в этом случае цикл forэто неправильный инструмент для работы.Возможно, вам следует использовать цикл do/while, который продолжает цикл до тех пор, пока не найдет элемент, в котором вы можете выйти из цикла.

Я бы также рекомендовал добавить условие отказоустойчивости, чтобы цикл не 't работать вечно.

В псевдокоде это выглядело бы примерно так:

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

Это будет нечто большее, например, перепроверка страницы для всех элементов и определение правильного элемента, ноВы должны получить идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...