Selenium通过CSS选择器定位无name/id的两个文本输入框
解决Selenium定位两个文本输入框的问题
你用findElement方法只会返回第一个匹配的元素,所以只能拿到一个输入框。要定位到两个文本输入框并填充内容,推荐以下几种实用方法:
方法一:获取所有匹配元素后逐个操作
使用findElements(复数形式)获取所有符合条件的输入框元素,再通过索引分别操作:
// Java 示例代码 List<WebElement> textInputs = driver.findElements(By.cssSelector("input[type='text']")); // 填充第一个输入框(任务名称) textInputs.get(0).sendKeys("今日任务"); // 填充第二个输入框(任务描述) textInputs.get(1).sendKeys("完成Selenium定位练习");
方法二:结合父容器精准定位
利用输入框所在的.col容器位置区分,写出更精准的CSS选择器:
- 第一个输入框选择器:
.row .col:first-child input[type='text'] - 第二个输入框选择器:
.row .col:nth-child(2) input[type='text']
对应代码:
// 定位并填充任务名称输入框 driver.findElement(By.cssSelector(".row .col:first-child input[type='text']")).sendKeys("整理桌面"); // 定位并填充任务描述输入框 driver.findElement(By.cssSelector(".row .col:nth-child(2) input[type='text']")).sendKeys("归类文件和杂物");
方法三:通过相邻标签关联定位
借助输入框前的label文本,用CSS相邻兄弟选择器+或者:has伪类定位(注意:has需要浏览器和Selenium版本支持):
/* 匹配任务名称对应的输入框 */ label:contains('Nom de la tâche') + input[type='text'] /* 匹配任务描述对应的输入框 */ label:contains('Description de la tâche en une ligne') + input[type='text']
如果原生Selenium不支持:contains,也可以改用XPath实现类似逻辑:
// XPath定位任务名称输入框 driver.findElement(By.xpath("//label[text()='Nom de la tâche']/following-sibling::input")).sendKeys("新任务");
内容的提问来源于stack exchange,提问作者hamza belatra
相关产品推荐
相关产品推荐

