Быстрое и грязное решение:
WebDriverWait wait = new WebDriverWait(driver, 15, 100);
driver.get("http://billing.scriptinglogic.net/index.php/sessions/login");
driver.findElement(By.id("email")).sendKeys("<EMAIL>");
driver.findElement(By.id("password")).sendKeys("<PASSWORD>");
driver.findElement(By.name("btn_login")).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[text()='Quotes']"))).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".create-quote"))).click();
wait.until(ExpectedConditions.elementToBeClickable(By.id("quote_password"))).sendKeys("password");
Обновляется на основе учетных данных, указанных в комментарии ниже.Я настроил селекторы для использования идентификатора, имени и класса, где это применимо.Нет необходимости использовать сложные локаторы XPath, когда они не нужны.
Требуются явные ожидания в зависимости от того, как работает сайт, и я добавил предложение Джеффа об использовании ожидаемого условия elementToBeClickable дляэлемент ввода (я не думаю, что это действительно требуется в этом случае, хотя, как кажется, сайт никогда не отключает поле ввода, поэтому ожидаемое условие visibilityOfElementLocated действительно так же хорошо) .
Это решение работает для меня в Chrome и Firefox в стандартном режиме и Firefox в безголовом режиме.Он не работает в автономном режиме в Chrome, потому что размер экрана меньше, а когда ширина экрана опускается ниже 1000 пикселей, заголовок изменяется, и текст «Цитаты» никогда не отображается.Ниже 767px заголовок полностью удален, и вы получите боковое меню.Это означает, что поток сценария должен слегка измениться в зависимости от разрешения.
Я бы предложил попросить вашего разработчика добавить идентификатор в пункты меню, это облегчит их поиск и использование сайта вего различные состояния.Быстрое и грязное решение этой проблемы - убедиться, что браузер имеет определенный размер во время выполнения теста, вы можете сделать это, установив размер в первой строке вашего скрипта:
driver.manage().window().setSize(new Dimension(1024, 768));
Когда вы делаете этоон проходит в Firefox и Chrome в стандартном и автономном режиме.
Примечание: Строки с явным ожиданием, приводящим к нажатию на элемент, являются элементами привязки, поэтому нет смыслаожидание нажатия на элемент, поскольку условие всегда будет возвращать true.