Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Не формується список посилань через List<WebElement>

webdriver
java
Теги: #<Tag:0x00007f7b70b2d1d8> #<Tag:0x00007f7b70b2cfd0>

(Grosha) #1

Мені потрібно отримати список посилань, які присутні на сторінці, але не всі - ті, які знаходяться в певному boxi. Їх я можу отримати створивши List з локатором, який мені дає ті посилання.Через FirePath запит написав - виділяє мені, те що треба, а коли запускаю тест - довжина масива дорівнює 0. Приведу приклад в на сторінці гугла, де відкриваю гугл, вводжу якісь дані, отримую сторінку з посиланнями.

public class GoogleSearchTest {

    private WebDriver browser;
    private MainGooglePage mainGooglePage;

    @BeforeClass
    public void setUp() {
        browser = new FirefoxDriver();
        browser.manage().window().maximize();
        browser.get(MainGooglePage.startGoogleLink);
        mainGooglePage = new MainGooglePage(browser);
    }

    @Test
    public void testing() throws InterruptedException {
        System.out.println(mainGooglePage.getTitlePage());
        mainGooglePage.checkStartGoogle();
        mainGooglePage.searchDataInGoogle("Den Simmons");

        mainGooglePage.openMewLink();
    }
}


public class MainGooglePage {
    private final WebDriver driver;
    public static final String startGoogleLink = "https://www.google.com.ua/";

    public static final By searchLocator = By.id("lst-ib");
    public static final By locatorStartSearch = By.name("btnG");
    public static final By locatorAllLink2 = By.xpath(".//*[@id='rso']/div[2]/li/div/h3/a");
    public static final By locatorAllLink = By.xpath(".//*[@id='rso']//h3/a");

    public MainGooglePage(WebDriver driver) {
        this.driver = driver;
    }

    public void searchDataInGoogle(String data) {
        driver.findElement(searchLocator).sendKeys(data);
        driver.findElement(locatorStartSearch).click();
    }

    public void checkStartGoogle() {
        Assert.assertEquals(driver.getTitle(), "Google");
    }

    public String getTitlePage() {
        return driver.getTitle();
    }

    public List<WebElement> getListWebElement(){
        return  driver.findElements(locatorAllLink);
    }

    public List<String> getListLink(){
        ArrayList<String> linkList = new ArrayList<String>();
        for (int i = 0; i < getListWebElement().size(); i++) {
            linkList.add(getListWebElement().get(i).getText().toString());
        }
        return linkList;
    }

    public void openMewLink() throws InterruptedException {
        System.out.println(getListLink().size());
        if (getListLink().size()!=0){
            for (int i = 0; i < getListLink().size(); i++) {
                System.out.println(getListLink().get(i));
                driver.findElement(By.linkText(getListLink().get(i))).click();
                driver.getTitle();
                Thread.sleep(1000);
                driver.navigate().back();
                Thread.sleep(300);
            }
        }
    }
}

Що я не правильно роблю? Порадьте інший спосіб.


(Ray Romanov) #2

Поглянь тут http://software-testing.ru/forum/index.php?/topic/21522-rabota-s-findelements/


#3

У Вас действие:

заканчивается кликом по кнопке.

После этого сразу ничего не появляется, надо дождаться результатов поиска.
Учитеcь использовать WebDriverWait и ExpectedConditions.


(Grosha) #4

Дякую! А я все не міг зрозуміти, чому в мене раз через 10, список заповнювався посиланнями. Поставив WebDriverWait - працює :smile: