Selenium webdriver Selenium动态xpath处理

Selenium webdriver Selenium动态xpath处理,selenium-webdriver,Selenium Webdriver,我有一个复选框带有input type=“Checkbox”value=“1053”name=“filelist” 如果用户为每个文件上载更多文件,则会在网页中添加一个复选框。 但这一点的价值正在改变 input type=“checkbox”value=“424”name=“filelist” 请帮助我如何在每个复选框的值都在更改且其他复选框的值相同时选中特定复选框。使用findelements方法读取使用名称或相对xpath的所有复选框 findelements返回列表。您可以使用任何复选框

我有一个复选框带有
input type=“Checkbox”value=“1053”name=“filelist”

如果用户为每个文件上载更多文件,则会在网页中添加一个复选框。 但这一点的价值正在改变
input type=“checkbox”value=“424”name=“filelist”


请帮助我如何在每个复选框的值都在更改且其他复选框的值相同时选中特定复选框。

使用findelements方法读取使用名称或相对xpath的所有复选框


findelements返回列表。您可以使用任何复选框

理想情况下,如果您没有获得任何唯一属性来定位元素,那么在这种情况下,您可以始终使用xpath。但正如您的问题所解释的,这里并没有唯一的常量属性值,您可以通过它创建相对xpath。因此,我的建议是:要么使用相对xpath,从上传的文件细节开始,如下所示:

 //file[@id='foo']/input[@type='checkbox']
或者使用
findelelements
查找所有复选框元素,并通过对web元素列表进行循环来执行任何您想执行的操作。它看起来像是:

Lis<WebElement> allChkBoxes = driver.findElements(By.name('filelist'));
// to click on first one
allChkBoxes.get(1).click();
Lis allChkBoxes=driver.findElements(By.name('filelist');
//点击第一个
获取(1).click();

您可以通过任何方法找到所有元素,如by.cssSelector()或by.name(),并在循环的帮助下单击它们:

List<WebElement> allCheckBoxes=driver.findElements(By.cssSelector("input[type='checkbox']"));
for(WebElement checkBox:allCheckBoxes){
      checkBox.click();
}
列出所有复选框=driver.findElements(By.cssSelector(“输入[type='checkbox']);
用于(WebElement复选框:所有复选框){
复选框。单击();
}

由于您的案例中没有唯一的属性可用,您可以使用索引:

String xPath = //input[@type='checkbox'][name='filelist'][i]
式中,i=指数,即1、2、3等,然后

WebElement chkBox = driver.findElement(By.xpath(xPath));
chkBox.click();