Для открытия формы в приложении используется нажатие комбинации клавиш на клавиатуре. (CTRL+L). Вызывается Js' ом данная форма. Как можно подобное действие описать при помощи WebDriver (Java, PageObject model)?
Selenium IDE не записывает никак эту имитацию... потому тест при Play валится.
Далнейшая работа в форме +/- записывается и воспроизводится.
driver.findElement(By.id("messageExt")).click(); // textbox в котором необходимо нажимать комбинацию Actions builder = new Actions(driver); builder.sendKeys(Keys.chord(Keys.CTRL,"l")).perform(); // вид комбинации
форма вызывается , но вот почему -то дальше в ней делать ничего не получается... тест падает, выдавая ошибку о "Element is not currently visible and so may not be interacted with", хотя элемент, который ищет есть и FireBug его находит..
промучавшись еще пару часов , форма не только запустилась, но и удалось некоторые действия произвести...
страницу завтра постараюсь вытащить...там проблем в том,что после сохранения формы, каждая последующая имеет номер, отличный на единицу от предыдушей в записи локатора.
например xpath //form/div[6]/input[1] -для первого открытия формы
//form[1]/div[6]/input[1] при последующем открытии формы...
и тест валится т.к в коде записано без 1 , а в тесте, на момент выполнения уже локатор с 1.
еще несколько часов борьбы и выяснилось следующее...
1) driver.findElement(By.xpath("//input[@value='Save']")).click(); так не желает искать. а вот с такой записью driver.findElement(By.xpath("//form/div[6]/input[1]")).click(); -как миленький.
2) после каждого алерта надо ставить ожидание .иначе просто "не успевает" сообразить ))
3) после отправки формы так же нужно ожидание... без ожидания форма создается ,но не отправляется.
ниже привела кусок тестового кода, который работает от момента нажатия Save. (сохраняется форма - отображается код формы. и отправка формы)
driver.findElement(By.xpath("//form/div[6]/input[1]")).click(); - Save driver.switchTo().alert().accept(); driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS); два алерта driver.switchTo().alert().accept(); driver.findElement(By.id("messageExt")).sendKeys("Hello"); driver.findElement(By.id("external-message-type-final")).click(); driver.findElement(By.id("ext-message")).click(); отправка формы driver.manage().timeouts().implicitlyWait(1, TimeUnit.SECONDS);
Возможно, есть варианты более красивой записи. тем более что //form/div[6] каждый раз при сохранении формы изменяет значение form на единицу: //form[1]/div[6] . но удалось запустить только такой вариант.
Комбинацию клавиш TAB так же использую для того, что бы после открытия формы перенести курсор на форму. ...
если есть идеи как улучшить - буду очень признательна!
- здесь атрибут у нас класс и href , если я верно понимаю...
использовать их можно, но единоразово. т.к при создании следующей формы, у меня будет уже находить на странице не одну кнопку Close, а уже две и тест сыпется. ...
class, href и прочие и являются атрибутами можно использовать локатор типа //a[@class='btn-close' and @href='#'] Если и этого мало, то и до самой ссылки тоже должны быть какие-то теги с уникальными атрибутами