如何“单击”单选按钮 -> 需要 xPath

p__*_*__d 1 selenium xpath selenium-webdriver

我需要检查三个单选按钮之一。我试过这个代码:

//input[@type='radio']/following-sibling::*[contains(., 'Inne akcje')]
Run Code Online (Sandbox Code Playgroud)

但我认为这是错误的方式。

<label class="HoldersInLineLabel">Rodzaj akcji</label>

<input type="radio" ng-model="holdersModel.OperationType" class="prettifiedIeCheckbox ng-valid ng-dirty" value="P" name="01H">
      "Przekazanie"
<input type="radio" ng-model="holdersModel.OperationType" value="D" class="prettifiedIeCheckbox ng-valid ng-dirty" name="01I">
     "Dekretacja"
<input type="radio" ng-model="holdersModel.OperationType" value="O" class="prettifiedIeCheckbox ng-valid ng-dirty" name="01J">
     "Inne akcje"

<span class="k-widget k-dropdown k-header ng-pristine ng-valid" unselectable="on" role="listbox" aria-haspopup="true" aria-expanded="false"...></span>
Run Code Online (Sandbox Code Playgroud)

sid*_*ker 5

以下 XPath 表达式将仅获取input您想要的元素:

//input[@type='radio'][following-sibling::text()[position()=1][contains(., 'Inne akcje')]]
Run Code Online (Sandbox Code Playgroud)

返回这个元素:

<input type="radio" ng-model="holdersModel.OperationType" value="O"
    class="prettifiedIeCheckbox ng-valid ng-dirty" name="01J" />
Run Code Online (Sandbox Code Playgroud)

与原始 XPath 表达式的主要区别是:

  • 不要使用语法input[@type='radio']/following-sibling…;而是使用//input[@type='radio'][following-sibling….

  • 不要使用following-sibling::*; 改为使用following-sibling::text()(因为在此上下文中*表示“任何元素”;因此,如果您想要该文本节点,则必须通过使用来明确指示它text())

  • 使用[position()=1]infollowing-sibling::*[position()=1]表示您想要第一个跟随兄弟。