试图在页面上找到文本元素

时间:2017-10-26 15:59:28

标签: java selenium selenium-webdriver webdriver

我有一个动态创建的汽车类型列表,在页面上生成。

我希望能够通过文本字符串找到元素,然后单击旁边的复选框(双击文本将产生相同的结果)

我目前正在使用:

              //select car makes
          Actions action = new Actions(driver);
          action.moveToElement(driver.findElement(By.xpath("//div[@id='MakesList']/label[2]/i"))).doubleClick().build().perform();

但这非常不稳定..并不总是选择我想要的选项。

所以我想获得字符串“ALFA ROMEO”:

action.moveToElement(driver.findElement(By.xpath("//label[contains(.,' ALFA ROMEO ')]"))).doubleClick().build().perform();

但我没有选择该选项。

这是html:

<label class="c-option c-option-search--right u-px u-py-sm u-bb u-m-0 ng-binding ng-scope" ng-repeat="item in label.buckets" ng-class="{ 'u-bg-faded  u-text-muted  u-disabled' : sc.doc_count[label.id + item.key] == 0 }"><input type="checkbox" name="capMakeName" value="alfaromeo" checklist-value="item" ng-model="checked" class="ng-scope ng-pristine ng-untouched ng-valid" checklist-model="sc.searchCriteria.selected.makes"> 
    <i class="c-option__checkbox"></i> ALFA ROMEO <span class="u-text-muted u-text-80 ng-binding">(9)</span>
</label>

任何指示赞赏。

3 个答案:

答案 0 :(得分:3)

在你的HTML中有:

<input type="checkbox" name="capMakeName" value="alfaromeo"

如果您的最终目标是单击复选框,则可以使用这些信息来执行此操作:

driver.findElement(By.xpath("//input[@name='capMakeName' and @value='alfaromeo']")).click();

答案 1 :(得分:0)

您可以先检查元素是否可见(或者等待它们加载),

driver.findElements( By.xpath("//input[@name='capMakeName' and @value='alfaromeo']" ).size() != 0

答案 2 :(得分:0)

您可以尝试将所有复选框作为列表,然后单击包含所需文本的复选框

public void clickCheckBoxWithText(String text){
  List<WebElement> checkboxes= driver.findElements(By.cssSelector("input[type='checkbox']"));
    for(WebElement checkbox:checkboxes){
        if(checkbox.getText().equals(text)) {
            checkbox.click();
            break;
        }
    }
}