Java, Selenium TimeoutException

Имея эту ошибку:

org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of element located by By.xpath: //select[@id='register-dob-month']/option[text()='5'] (tried for 5 second(s) with 500 milliseconds interval)

SignUpPage:

public class SignUpPage {
private WebDriver driver;

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

private By monthDropDown = By.cssSelector("select#register-dob-month");
private String monthDropDownOption = "//select[@id='register-dob-month']/option[text()='%s']";
private By dayField = By.cssSelector("input#register-dob-day");
private By yearField = By.cssSelector("input#register-dob-year");
private String genderRadioButton = "//li[@id='li-gender']/label[normalize-space()='Male']/input";
private By shareCheckbox = By.cssSelector("input#register-thirdparty");

public SignUpPage setMonth(String month) {
    driver.findElement(monthDropDown).click();
    new WebDriverWait(driver, 5).until(visibilityOfElementLocated(xpath(format(monthDropDownOption, month)))).click();
    return this;
}


public SignUpPage typeDay(String day) {
    driver.findElement(dayField).sendKeys(day);
    return this;
}

public SignUpPage typeYear(String year) {
    driver.findElement(yearField).sendKeys(year);
    return this;
}

SignUpTest:

public class SignUpTest {
WebDriver driver;
SignUpPage page;

@Before
public  void setUp(){
    driver = new ChromeDriver();
    driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
    driver.get("https://www.spotify.com/int/signup");
}

@Test
public void typeInvalidYear(){
    page = new SignUpPage(driver);
    page.setMonth("5")
            .typeDay("20")
            .typeYear("88");
    Assert.assertTrue(page.isErrorVisible("Please enter a valid year."));
    Assert.assertFalse(page.isErrorVisible("When were you born?"));
}

@After
public void tearDown() {
    driver.quit();
}

это означает, что ваш сайт не открывался в течение 5 секунд. неявно увеличивать Подождите до 30.

Senior Pomidor 11.07.2018 11:00

@SeniorPomidor бесполезен, пробовал раньше

Роман 11.07.2018 11:09

Вы отлаживали свой xpath вручную на консоли Chrome?

AutomatedOwl 11.07.2018 11:11

@ Роман Что именно вы пытаетесь делать в xpath(format(monthDropDownOption, month))?

DebanjanB 11.07.2018 12:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
122
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эта ошибка возникает из-за того, что вы используете в xpath «текст()», но должны использовать «// выбираем [@ id = 'register-dob-month'] / option [@ value = '05 ']» посмотрите свой HTML (скриншот - http://prntscr.com/k539il) или же используйте "Может", "апреля" вместо номера месяца. Кроме того, вы можете попробовать использовать класс Selenium Select для работы с этим раскрывающимся списком:

WebElement Dropdown = driver.findElement(By.cssSelector("select#register-dob-month"));

Select select = new Select(Dropdown);

select.selectByIndex(4);
//or
select.deselectByVisibleText("May");

Другие вопросы по теме