如何查找具有动态生成id的元素

时间:2017-09-15 17:21:32

标签: selenium cucumber-java

我需要单击此元素并上传文档,但此处按钮的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(&quot;--ng-file-upload-0.6873237604099194&quot;).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:无效的选择器:An   指定了无效或非法的选择器(会话信息:   chrome = 60.0.3112.113)(驾驶信息:chromedriver = 2.30.477700   (0057494ad8732195794a7b32078424f92a5fce41),platform = Windows NT   10.0.14393 x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:104毫秒

3 个答案:

答案 0 :(得分:1)

您尝试使用文本&#34;批准&#34;来获取此项目,但这是aria-label,因此您应该使用xpath执行此操作(假设这只是具有此标签的按钮):

//button[@aria-label='Approve']

或使用css选择器:

button[aria-label=Approve]

答案 1 :(得分:1)

你的第一个选择器最后有一个额外的]。它应该是

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();

答案 2 :(得分:0)

尝试使用此动态值

webDriver.findElement(By.xpath("//input[contains(@id, 'Somevalue')]"));