我如何为Selenium的以下元素创建定位器

时间:2018-11-09 12:00:32

标签: selenium selenium-webdriver xpath css-selectors webdriverwait

我试图创建一个Xpath来单击radioButton。请参阅下面的元素和来自Web的xpath:

Xpath:

/html/body/div[3]/div[2]/form/table/tbody/tr[5]/td[2]/label[1]/input

ELEMENT:

<input type="radio" ng-model="dataRow[column.map]" name="optionsRadios" value="15" class="ng-pristine ng-valid">

3 个答案:

答案 0 :(得分:0)

如果您在标签上看到一个名称,那么从一个ID开头开始可能是一个不错的选择。

//input[@name='optionsRadios']

我建议您改用CSS选择器,因为它们更快,更好地被支持,并且语法更简单,更容易理解。

input[name='optionsRadios']

W3C Selectors Reference

答案 1 :(得分:0)

首选使用CSS选择器,而不是xpath。

css = input.ng-原始ng-valid
要么 css = input [name = optionsRadios]

答案 2 :(得分:0)

您尝试互动的元素(可能是click())是Angular元素,因此您必须诱使 WebDriverWait 使元素可点击,您可以使用以下任一(Java)解决方案:

  • cssSelector

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.ng-pristine.ng-valid[name='optionsRadios'][ng-model*='column']"))).click();
    
  • xpath

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='ng-pristine ng-valid' and @name='optionsRadios'][contains(@ng-model,'column')]"))).click();