Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图在页面上定位文本元素_Java_Selenium_Selenium Webdriver_Webdriver - Fatal编程技术网

Java 试图在页面上定位文本元素

Java 试图在页面上定位文本元素,java,selenium,selenium-webdriver,webdriver,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")

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

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

我目前正在使用:

              //select car makes
          Actions action = new Actions(driver);
          action.moveToElement(driver.findElement(By.xpath("//div[@id='MakesList']/label[2]/i"))).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>

阿尔法罗密欧(9)

任何提示都值得欣赏。

在您的html中有:

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

在您的html中有:

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

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


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


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

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;
        }
    }
}
public void单击带有文本的复选框(字符串文本){
列表复选框=driver.findElements(By.cssSelector(“输入[type='checkbox']”);
用于(WebElement复选框:复选框){
if(checkbox.getText().equals(text)){
复选框。单击();
打破
}
}
}

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

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;
        }
    }
}
public void单击带有文本的复选框(字符串文本){
列表复选框=driver.findElements(By.cssSelector(“输入[type='checkbox']”);
用于(WebElement复选框:复选框){
if(checkbox.getText().equals(text)){
复选框。单击();
打破
}
}
}

它是一款有角度的应用程序。在继续单击之前,是否确保元素已完全加载?它是一个角度应用程序。在继续单击之前,是否确保元素已完全加载?
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;
        }
    }
}