2017-09-15 121 views
-1

我需要點擊這個元素並上傳一個文檔,但這裏的按鈕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(&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> 

試圖找到並單擊在下面的方法:

1)driver.findElement(By.cssSelector(「按鈕[ID^=」電子 - NG-文件級上傳']「))點擊()。 。

2)driver.findElement(By.xpath( 「//按鈕[含有(文本(), '批准')]」))點擊();

在一些其他方法試圖藏漢

,每次收到此錯誤:

org.openqa.selenium.InvalidSelectorException:無效的選擇:一個無效或非法選擇指定 (會話信息:鉻= 60.0.3112.113) (駕駛員信息:chromedriver = 2.30.477700(0057494ad8732195794a7b32078424f92a5fce41),平臺= Windows NT的10.0.14393 x86_64的)(警告:服務器未提供任何信息棧跟蹤) 命令持續時間或超時:104毫秒

感謝您的幫助提前

+0

在這裏你會得到你的答案https://stackoverflow.com/questions/8918164/get-the-id-name-of-an-element -from-dynamically-generated-html-jquery – zsbappa

+0

嗨zsbappa,我需要實現它使用硒java,例如在jquery – user3787164

回答

1

你試圖獲得這個項目文本「批准」,但這是詠歎調標籤,所以你應該這樣做使用xpath(假設這是隻有按鈕有這個標籤) :

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

或與CSS選擇:

button[aria-label=Approve]

+0

這工作,感謝Mateusz Marchel。 – user3787164

0

嘗試這一個動態值

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

您的第一個選擇器在結尾處有一個額外的]。它應該是

你的第二選擇...我不知道它是如何工作的,因爲「批准」是不是該元素中包含。您可以嘗試

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

嗨,Jeffc,有同樣的錯誤:org.openqa.selenium.InvalidSelectorException ....... – user3787164

+0

我發佈了4個不同的選擇器,所有這些選擇器都是有效的,所以你必須從別的東西得到錯誤。你需要更新你的問題與你已經嘗試(發佈每個代碼)和你收到的每個錯誤。 – JeffC