Проблема Selenium Webdriver с: Ожидаемое условие не выполнено: ожидание видимости элемента, расположенного (..) - PullRequest
0 голосов
/ 17 ноября 2018

У меня небольшая проблема с моим автоматическим тестом. Когда мой тест делает ошибку:

Ожидаемое условие не выполнено: ожидание видимости элемента, расположенного (...)

и я не знаю в чем проблема.

@BeforeMethod
public void BeforeTest(){
    System.setProperty("webdriver.chrome.driver", "C:/drivers/chromedriver.exe");
    driver = new ChromeDriver();
    driver.manage().window().maximize();
    driver.navigate().to("https://poczta.o2.pl/rejestracja/");
}

@Test
public void Test(){
    WebDriverWait wait = new WebDriverWait(driver, 10);
    WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("[name='9cb78dee-04b3-01d5-524b-9159a1646cd3']")));

    WebElement user = driver.findElement(By.cssSelector("[name='9cb78dee-04b3-01d5-524b-9159a1646cd3']"));
    user.sendKeys("Cezary");

    WebElement user2 = driver.findElement(By.cssSelector("input[name*='42aced']"));
    user2.sendKeys("Znojek");

    WebElement male = driver.findElement(By.id("male"));
    ((WebElement) male).click();
}

enter image description here

В чем моя проблема?

1 Ответ

0 голосов
/ 17 ноября 2018

Похоже, что имя 9cb78dee-04b3-01d5-524b-9159a1646cd3 является динамическим.Например, когда я загрузил страницу, теперь элемент «имя» выглядел так:

<input type="text" name="2a810eef-304a-e7bb-d148-f9655e639f02" aria-labelledby="0bd5980e-a03a-4dd9-1302-105b999c3afc" class="invalid sc-bZQynM bZqAGh" autocomplete="off" value="">

Так что вы не можете использовать его для идентификации объекта.В случае этой конкретной формы, я бы порекомендовал найти метку, а затем взять связанное с ней поле ввода.Они оба включены в один и тот же div, поэтому их можно различить:

<div class="">
    <label id="790a1161-7317-afc5-7563-1973254ccc96" class="sc-dnqmqq dsXufX">Imię</label>
    <input type="text" name="885f994f-f81e-7142-c3f0-61420449b0b7" aria-labelledby="790a1161-7317-afc5-7563-1973254ccc96" class="sc-bZQynM bZqAGh" autocomplete="off" value="">
</div>

В XPath это можно выразить так:

//label[text()='Imię']/../input

(выберите метку, вернитесь к родителю, а затем выберитеполе ввода под тем же родителем)

Такой выбор также намного лучше семантически, потому что очень ясно, что вы выбираете (поле имени), в отличие от выбора по GUID, который не говорит вам, что это такоеВы выбираете.

В CSS-селекторе, боюсь, это невозможно, так как он не поддерживает выбор по тексту (я могу ошибаться, так как CSS-селекторы не моя сильная сторона).

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