Входные данные и их атрибуты постоянно меняются в Dynamic x-path в Selenium

Я попытался найти x-путь текстового поля имя пользователя и пароль, но он продолжает динамически меняться. Я не смогу использовать starts-with или contains в найти элемент с помощью x-path. Вот HTML DOM-

      <div id="contents">
          <h1 style="white-space:pre; width:80px; float:left;line-height:35px;">Login</h1>
          <span style="float:left; padding-top:13px; COLOR:#990033; font-weight:bold;">  Student | Parent | Faculty</span>
          <div class="form-elements">
          <div class="form-elements">
          <div class="form-elements">
              <div class="label-txt">Password</div>
              <input id="rcnr2uew1m0rkikeaaniwk" type="password" style="display:none;" name="rcnr2uew1m0rkikeaaniwk"/>
              <input id="ko2xs123ebqyoluh15bulu" type="password" style="display:none;" name="ko2xs123ebqyoluh15bulu"/>
              <input id="cuouek4bfz41etm4hroj0r" type="password" style="display:none;" name="cuouek4bfz41etm4hroj0r"/>
              <input id="u2ta3gv2o2ce0azx5plpuh" type="password" name="u2ta3gv2o2ce0azx5plpuh"/>
              <input id="g03nwjuzhqnkuwgsl4q2mu" type="password" style="display:none;" name="g03nwjuzhqnkuwgsl4q2mu"/>
              <input id="gddwv4z3amojk0yvoxi2v4" type="password" style="display:none;" name="gddwv4z3amojk0yvoxi2v4"/>
              <input id="kxecmkho2vf1vcfb42icjr" type="password" style="display:none;" name="kxecmkho2vf1vcfb42icjr"/>
              <span id="ctl04" style="color:Red;visibility:hidden;">*</span>
         </div>

Я попытался найти ввод [4] без стиля.

Абсолютный x-path- html/body/form/div[3]/div[1]/div[2]/div[1]/div[1]/div[1]/div[2]/input [4]

В следующий раз, как это изменится-

Абсолютный x-path- html/body/form/div[3]/div[1]/div[2]/div[1]/div[1]/div[1]/div[2]/input [17]

id и name из input также продолжают меняться без какой-либо общей черты


person bot13    schedule 04.02.2017    source источник


Ответы (2)


Вы можете сделать это, найдя родственного элемента отображаемой метки User name, т.е. без атрибута style="display:none;"

Имя пользователя

"//div[contains(text(), 'User Name')]/following-sibling::input[not(@style='display:none;')]"

Пароль

"//div[contains(text(), 'Password')]/following-sibling::input[not(@style='display:none;')]"
person Guy    schedule 04.02.2017
comment
Спасибо, если атрибут style не отсутствует, как я могу подойти к проблеме? - person bot13; 04.02.2017
comment
@ bot13 Вы можете проверить наличие определенного атрибута not(@style='display:none;'). Отредактировано и в моем ответе. - person Guy; 04.02.2017
comment
Я имел в виду, что если атрибут style присутствует и для имени пользователя, то каким может быть подход, потому что тогда все входы имеют одинаковый адрес - person bot13; 04.02.2017
comment
@bot13 not(@style='display:none;') ищет элемент, у которого нет style атрибута display:none. Если атрибут style был чем-то другим, например block, этот xpath найдет его. - person Guy; 04.02.2017

Или что-то подобное с использованием атрибута type:

//input[@type='password'][not(@style)]
person lauda    schedule 04.02.2017