当Id不是常数时,如何使用Selenium WebDriver查找元素(

时间:2013-04-26 23:38:56

标签: extjs xpath selenium css-selectors selenium-webdriver

我需要帮助才能使用Selenium WebDriver查找元素。我已经尝试了所有可能的选择器,但我无法找到该元素。

FYI。 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元素并将文本发送到找到的元素。

欣赏你是否可以请一些灯光。

3 个答案:

答案 0 :(得分:0)

每次加载新页面时div的ID是否都会改变?

我建议你写这样的东西:

css选择器:"div.x-form-element input"

但是,如果您有很多以x-form-element作为class值的div,则可以使用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

答案 1 :(得分: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");

答案 2 :(得分: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永远不会失败。