Не удается найти поле входа в систему по типу атрибута или xpath - PullRequest
0 голосов
/ 12 сентября 2018

HTML выглядит следующим образом

<input class="text-input text-input-md" dir="auto" ng-reflect-klass="text-input" ng-reflect-ng-class="text-input-md" type="email" aria-labelledby="lbl-14" autocomplete="off" autocorrect="off" placeholder="" ng-reflect-type="email">

код не может найти поле для входа ... пробовал по атрибуту

var email_xpath = "//*[type='email']" 

затем xpath

var email_xpath = "/html/body/ion-app/ng-component/ion-split-pane/ion-nav/page-login/ion-content/div[2]/ion-list/ion-item[1]/div[1]/div/ion-input/input"
var email = webDriver.findElement(By.xpath(email_xpath))

новсе еще не может получить элемент ....

=============== Обновлено ===============

Большинство решений, представленных ниже, работают с драйвером селена Firefox.Проблема была действительно с драйвером htmlunit, который я использовал в Scala.Вероятно, он не может правильно обрабатывать JavaScript.Я изменил его с драйвером Firefox, и ваши решения работают хорошо.Тестируемое приложение является приложением Ionic (угловое), поэтому мне придется искать другое безголовое решение позже.

Ответы [ 5 ]

0 голосов
/ 12 сентября 2018

Поскольку вы используете WATIR, вам не нужно писать xpath, напишите приведенный ниже код, он будет работать.

b.text_field(type: "email").set "abc@gmail.com"
0 голосов
/ 12 сентября 2018

Общий синтаксис похож на приведенный ниже для xpath

  1. // - означает, что относительный xpath может присутствовать где угодно внутри DOM
  2. tagName - означает html-теги, такие как td,tr, span, br, input и т. д.
  3. @ - обозначает начало имени атрибута, присутствующего в html-теге
  4. value - фактическое значение атрибута, присутствующее в DOM

     //tagName[@attribute='value']
    
0 голосов
/ 12 сентября 2018

Предыдущий ответ верен, но Вы можете попробовать это также //input[@type='email']

0 голосов
/ 12 сентября 2018

Вы можете использовать любой XPath, так как некоторые из них уже упоминались @Andersson и @ zsbappa

некоторые другие

//input[@class='text-input text-input-md' and @type='email']
//input[contains(@type,'email')]
0 голосов
/ 12 сентября 2018

//*[type='email'] неверный XPath. Вместо этого попробуйте ниже:

//*[@type='email']

Обратите внимание, что предикат type='email' означает дочерний узел со строковым значением 'email':

<input>
    <type>email</type>
</input>

Пока @type='email' означает атрибут type со значением "email"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...