Иногда падает тест при клике на изображение

selenide
Теги: #<Tag:0x00007fedb8b85800>

(Arina) #1

Доброе время суток!
такое ощущение, что иногда браузер обрабатывает код быстрее и тест падает на определенном месте, в других случаях все хорошо.
Падает на $(byTitle(“Add to collection”)).click();
Собственно, идет клик на фото, потом открывается новое окно и там уже идет поиск кнопки с тайтлом "Add to collection

public class Collection {
    
@BeforeTest
    public void StepZero() {
        Configuration.browser = "chrome";
        open("https://unsplash.com");
        $(byLinkText("Login")).click();
        $("#user_email").setValue(email);
        $("#user_password").setValue(password).pressEnter();
    }
    @Test
    public void StepOne(){
        $(byCssSelector("a[href*='/@']")).click();
        $("[data-test='photo-component']").shouldBe(enabled).click();
       $(byTitle("Add to collection")).click();
        $(withText("Create a new collection")).click();
        $(byId("collection_title")).setValue(name);
        $(byId("collection_description")).setValue(description);
        $(byId("collection_privacy")).setSelected(true);
        $(withText("Create collection")).click();

   }

}

Element not found {[title=‘Add to collection’]}
Expected: visible
Timeout: 4 s.
Caused by: NoSuchElementException: no such element: Unable to locate element: {“method”:“css selector”,“selector”:"[title=‘Add to collection’]"}

Может стоит прописать ожидание появление данного окна? или как решить это иначе?
Спасибо.


#2

добавь ожидание появления кнопки , например проверить или она отображается .isDisplayed() если нет то .sleep()1 секунду и так N раз (сколько допустимо) , если не загрузилось - тогда падать.


(Dmitry Nesterov) #3

Хардкодить с .sleep(SECONDS) я бы не стал точно. А вот wait точно бы поставил. Можно использовать wait.until(ExpectedConditions.visibilityofElementLocated(ваш локатор)


(Остап Олексин) #4

Вам нужно дождаться появления елемента:
$(byTitle("Add to collection")).waitUntil(Condition.visible, 10000).click();


(Arina) #5
    WebElement collection = wait.until(ExpectedConditions.visibilityOfElementLocated(byTitle("Add to collection")));

кажется что-то тут не так


(Arina) #6

Опять же падает через раз, но уже с

Caused by: NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"[title='Add to collection']"}
	at com.codeborne.selenide.impl.WebElementSource.createElementNotFoundError(WebElementSource.java:31)

(Dmitry Nesterov) #7

Tak a y vas “Title” v iframe ili v novom okne? Vam nugno sna4ala perekly4itbsya na novoe okno.


(Arina) #8

Получается, что есть фото
Чтобы увидеть title и прочее, нужно навести курсор
$("[data-test=‘photo-component’]").shouldBe(enabled).click(); для этого использую этот кусок

После того, как курсор на фото, тогда появляется кнопка Add to collection

Но в коде браузера она выглядит вот так

< div class="_3W6mQ">< a title="Add to collection" class="_1yvXd _1l4Hh _1CBrG _1zIyn xLon9" href="/@testovoi?add_to_collection_view=is_visible">< svg class="_2rdbO _2T3hc" version="1.1" viewBox="0 0 32 32" width="32" height="32" aria-hidden="false" >

(Vatslau) #9

маузоовер в помощь
добавьте наведение курсора