2015-07-30 4 views
2

Im используя транспортир для e2e testing.i хочет, чтобы нажать кнопкиКак нажимать кнопки без элемента ID

+1

показать код ...... –

+0

@vignesh, пожалуйста, измените вопрос и добавить код там - не в комментариях –

+0

Откройте консоль браузера и попробуйте выбрать один и тот же элемент с помощью селектора, который вы использовали, и посмотрите, работает ли он. Если не настроить его. – Chandermani

ответ

1

Есть ли какая-либо причина вы не используете транспортир API, но драйвер напрямую? Выбор Нг-клик не может быть лучшим подходом здесь, а также (хорошая практика, как представляется, выбор на основе структуры страницы, а не механики), я бы рекомендовал вам исследовать, если вы не можете просто использовать by.buttonText:

element(by.buttonText('Place Order')); 

EDIT: Глядя на то, как селектор выполнен, выше не будет работать - пожалуйста, обратите внимание by.buttonText будет соответствовать только:

  • кнопка
  • вход типа = "кнопку"
  • input type = "submit"

Я сохраняю это для всех, кому это может понадобиться в будущем.

Если это не сработает, возможно, вы могли бы по крайней мере выбрать его по классу, например. внутри родителя? Например:

element(by.css('.btn-wrapper > .btn:nth-child(2)')); 

Кроме того, рассмотрите возможность добавления отдельного класса/идентификатора для кнопки, возможно, это будет полезно позже.

Последнее замечание, если у вас есть большая страница для тестирования, рассмотрите возможность использования page objects вместо того, чтобы выбирать один и тот же материал в отдельных шагах. Таким образом, вместо того, чтобы писать селектор, вы будете иметь хороший, ремонтопригодны объект, который можно использовать как:

myPage.placeOrderButton().click(); 

Просто что-то рассмотреть.

+0

Да, это может не сработать в этом случае. Вы пробовали какие-то из следующих подходов, которые я предложил? – wap300

+0

Отличный ответ, продолжайте! – alecxe

0

Место кнопка заказа:

$('[ng-if*="checkout"]').click(); 

Кнопка Отмена:

$('[ui-sref=​"main.store.featured"]').click(); 
0

Это должно работать:

element(by.css('[ng-click="ctrl.placeOrder()"]')).click(); 
0

Я думаю, самый простой и самый читаемый подход здесь будет найдите элемент по тексту:

element(by.xpath('//div[. = "Place Order"]')); 

Вы можете просто нужно добавить wait for element to become visible:

var EC = protractor.ExpectedConditions, 
    placeOrder = element(by.xpath('//div[. = "Place Order"]')); 

browser.wait(EC.visibilityOf(placeOrder), 5000); 
placeOrder.click(); 
+0

Я думаю, из-за того, что эта «кнопка» сделана, селектор фактически не будет соответствовать ей. Я бы сказал, что наилучшим подходом было бы изменить html, чтобы он соответствовал любому из них: https://github.com/angular/protractor/pull/455/files#diff-89f02ac1eed840a7f24ba7f0c2411178R376 – wap300

+0

@ wap300 oh, yeah , хороший момент, это элемент 'div'. Я обновлю ответ. – alecxe

Смежные вопросы