Selenium Webdriver - 输入 js/html 元素识别

Selenium Webdriver - Input js/html elements identification

输入元素识别有问题。

例如有两个像这样的字段...

<div class="col-xs-10">
  <h4>
    <a href="#" data-type="text" id="firstName" class="editable editable-click">
      Alejandroff
    </a>
  </h4>
  <h4>
    <a href="#" data-type="text" id="lastName" class="editable editable-click">
      Puchauff
    </a>
  </h4>
</div>

...点击后。名字改成这个...

<div class="col-xs-10">
  <h4>
    <a href="#" data-type="text" id="firstName" class="editable editable-click editable-open" style="display: none;">
      Alejandroff
    </a>
    <span class="editable-container editable-inline" style="">
      <div>
        <div class="editableform-loading" style="display: none;">
        </div>
        <form class="form-inline editableform" style="">
          <div class="control-group">
            <div>
              <div class="editable-input" style="position: relative;">
                <input type="text" class="input-medium" style="padding-right: 24px;">
                <span class="editable-clear-x">
                </span>
              </div>
            </div>
            <div class="editable-error-block help-block" style="display: none;">
            </div>
          </div>
        </form>
      </div>
    </span>
  </h4>
  <h4>
    <a href="#" data-type="text" id="lastName" class="editable editable-click" style="display: inline;">
      Puchauff
    </a>
  </h4>
</div>

直到现在识别名称输入元素如

xpath = "//*[@id="userDetails"]/div[1]/div[1]/h4[1]/span/div/form/div/div[1]/div/input

但我知道这是不正确的,因为它使我的测试变得脆弱(万一开发人员将例如删除一个 div 测试将失败)。

谁能建议如何以另一种方式识别输入?

我没有在您提供的降价中看到 userDetails 定义,但您需要一些独特的东西来依赖。所以假设你想要这个输入:

                        <div class="editable-input" style="position: relative;">
                            <input type="text" class="input-medium" style="padding-right: 24px;">
                                <span class="editable-clear-x"/>
                            </div>
                        </div>

您可以使用 id="firstName" 标识符。所以尝试像

这样的东西
//div[@id="firstName"]//..//input[@class="input-medium"]

尝试

"//a[@id='firstName']//following::input[@class='input-medium']"