2013-04-26 71 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将永远不会失败,除非标签发生变化。

相关问题