Имея эту ошибку:
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();
}
@SeniorPomidor бесполезен, пробовал раньше
Вы отлаживали свой xpath вручную на консоли Chrome?
@ Роман Что именно вы пытаетесь делать в xpath(format(monthDropDownOption, month))?




Эта ошибка возникает из-за того, что вы используете в 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");
это означает, что ваш сайт не открывался в течение 5 секунд. неявно увеличивать Подождите до 30.