如何找到具有动态生成 id 的元素
How to find an element which has dynamic generating id
我需要单击此元素并上传文档,但此处按钮的 ID 是动态生成的。
元素:
<button class="md-raised md-primary e-button-small md-button md-ink-ripple" type="button" ng-transclude="" aria-label="Approve" data-ng-file-select="onFileSelect($files, rule)" data-accept="*/*" multiple="multiple" onclick="document.getElementById("--ng-file-upload-0.6873237604099194").click()" id="e--ng-file-upload-0.6873237604099194" style="overflow: hidden;">
<span class="ng-scope">Upload File</span>
<div class="md-ripple-container" style=""></div>
</button>
尝试通过以下方式查找并点击:
driver.findElement(By.cssSelector("button[id^='e--ng-file-upload']]")).click();
driver.findElement(By.xpath("//button[contains(text(), 'Approve')]")).click();
- 我也看了here
每次都出现这个错误:
org.openqa.selenium.InvalidSelectorException: invalid selector: An
invalid or illegal selector was specified (Session info:
chrome=60.0.3112.113) (Driver info: chromedriver=2.30.477700
(0057494ad8732195794a7b32078424f92a5fce41),platform=Windows NT
10.0.14393 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 104 milliseconds
您尝试使用文本 "Approve" 获取此项目,但这是 aria-label,因此您应该使用 xpath 这样做(假设这只是具有此标签的按钮):
//button[@aria-label='Approve']
或使用 css 选择器:
button[aria-label=Approve]
试试这个动态值
webDriver.findElement(By.xpath("//input[contains(@id, 'Somevalue')]"));
您的第一个选择器末尾有一个额外的 ]。应该是
driver.findElement(By.cssSelector("button[id^='e--ng-file-upload']")).click();
你的第二个选择器...我不知道它应该如何工作,因为 "Approve" 不包含在该元素中。你可以试试
driver.findElement(By.xpath("//button[contains(text(), 'Upload File')]")).click();
其他选项:
driver.findElement(By.cssSelector("button[aria-label='Approve']")).click();
driver.findElement(By.xpath("//span[.='Upload File']")).click();
我需要单击此元素并上传文档,但此处按钮的 ID 是动态生成的。
元素:
<button class="md-raised md-primary e-button-small md-button md-ink-ripple" type="button" ng-transclude="" aria-label="Approve" data-ng-file-select="onFileSelect($files, rule)" data-accept="*/*" multiple="multiple" onclick="document.getElementById("--ng-file-upload-0.6873237604099194").click()" id="e--ng-file-upload-0.6873237604099194" style="overflow: hidden;">
<span class="ng-scope">Upload File</span>
<div class="md-ripple-container" style=""></div>
</button>
尝试通过以下方式查找并点击:
driver.findElement(By.cssSelector("button[id^='e--ng-file-upload']]")).click();
driver.findElement(By.xpath("//button[contains(text(), 'Approve')]")).click();
- 我也看了here
每次都出现这个错误:
org.openqa.selenium.InvalidSelectorException: invalid selector: An invalid or illegal selector was specified (Session info: chrome=60.0.3112.113) (Driver info: chromedriver=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),platform=Windows NT 10.0.14393 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 104 milliseconds
您尝试使用文本 "Approve" 获取此项目,但这是 aria-label,因此您应该使用 xpath 这样做(假设这只是具有此标签的按钮):
//button[@aria-label='Approve']
或使用 css 选择器:
button[aria-label=Approve]
试试这个动态值
webDriver.findElement(By.xpath("//input[contains(@id, 'Somevalue')]"));
您的第一个选择器末尾有一个额外的 ]。应该是
driver.findElement(By.cssSelector("button[id^='e--ng-file-upload']")).click();
你的第二个选择器...我不知道它应该如何工作,因为 "Approve" 不包含在该元素中。你可以试试
driver.findElement(By.xpath("//button[contains(text(), 'Upload File')]")).click();
其他选项:
driver.findElement(By.cssSelector("button[aria-label='Approve']")).click();
driver.findElement(By.xpath("//span[.='Upload File']")).click();