我需要帮助才能使用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元素并将文本发送到找到的元素。
欣赏你是否可以请一些灯光。
答案 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.
答案 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永远不会失败。