2013-04-26 70 views
1

我需要使用Selenium WebDriver查找元素的幫助。我嘗試了所有可能的選擇器,但我無法找到該元素。如何使用Selenium WebDriver查找元素,當Id不包含時(<input id =「ext-gen26」)

僅供參考。 id =「ext-gen26」不是固定的,每次新頁面加載時,這都會改變。

Tried Selectors: 

    By.xpath("//button[@class=\"x-btn-text\"]/text()='Find Accounts'") 
    By.cssSelector(input[name='id']) 
    By.id("ext-gen26") 

Code: 
    <div id="x-form-el-ext-gen26" class="x-form-element" style="padding-left:155px"> 
    <input id="ext-gen26" class="x-form-text x-form-field " type="text" name="id" 
    autocomplete="off" size="20" style="width: 212px;"> 
    </div> 

我想查找帳戶ID元素併發送文本到找到的元素。

欣賞如果你可以請擺脫一些燈。

+0

你需要解釋lite更詳細的訪問這個元素的規則。例如,用xpath按類內容選擇此輸入的xpath將是//輸入[@ class ='x-form-text x-form-field']' – 2013-04-27 06:56:17

回答

0

每當您加載新頁面時,div的id是否也會更改?

我建議你寫類似的東西:

CSS選擇器:"div.x-form-element input"

但是,如果你有很多的div與x-form-elementclass值,你可以使用nth-child()功能。像:

CSS選擇器:"div.x-form-element:nth-child(n) input" // n is the position order of your div that has x-form-element as class value.

nth-child() documentation

0

這裏是我的方法:使用在客戶端的ExtJS組件查詢來獲取ID,然後使用ID來定位WebElement。要發送密鑰,通常需要深入挖掘一個級別以獲取「inputEl」。 Java的代碼示例:

//a fully qualified ExtJS component query that will return one match only 
String query = "viewport #panel1 textfield[fieldLabel='Test Field']"; 
//use component query to find id 
String js = "return Ext.ComponentQuery.query(\"" + query + "\")[0].inputEl.id;"; 
String id = (String) ((JavascriptExecutor) _driver).executeScript(js);  
WebElement element = driver.findElement(By.id(id)); 
element.sendKeys("it works"); 
0

你測試的應用程序必須是具有輸入字段,組合框背後的標籤,複選框等

請嘗試像下面,考慮到你的應用是有標籤的「帳戶ID 「

(//*[text()='Account ID']/following::input)[1] 

HTML代碼將看起來像這 -

<html> 
<div id="x-form-el-ext-gen26" class="x-form-element" style="padding-left:155px"> 
    <label>Account ID: </label> 
    <input id="ext-gen26" class="x-form-text x-form-field " type="text" name="id" 
    autocomplete="off" size="20" style="width: 212px;"> 
    </div> 
</html> 

這種xpath將永遠不會失敗,除非標籤發生變化。

相關問題