如何使用selenium webdriver查找动态元素?

时间:2014-10-29 18:05:30

标签: webdriver

我想在我的网页中找到一个元素,这是我输入名称的文本字段。 所以元素是:

<input type="text" id="a110_name" name="name" maxlength="255">

第一次,我的测试效果很好。 如果我添加一个循环再次单击该元素,则找不到selenium,因为id已更改。

例如:每次点击它时,ID都会改变。

<input type="text" id="a110_name" name="name" maxlength="255">
<input type="text" id="a120_name" name="name" maxlength="255">

我的代码:

driver.findElement(By.id("a110_name")).sendKeys("test");

如何解决此问题?

3 个答案:

答案 0 :(得分:2)

很高兴听到您使用XPATH解决了它。您可以使用CSS定位器解决此问题,如下所示:

driver.findElement(By.cssSelector("input[id$='_name']"));

我们必须谨慎使用XPATH的“contains”关键字,在某些情况下它可能与其他一些元素匹配。如果你更舒服XPATH,最好使用//input[ends-with(@id,'_name')]

答案 1 :(得分:1)

通过包含文字识别元素

如果动态元素具有明确的模式,那么我们也可以在元素定位器中使用“start-with”或“contains”等JavaScript函数来将定位器的动态部分与静态部分分开。

例如,在您提供的Id示例的情况下,我们可以使用'contains'函数来访问此定位器,而不管其动态部分。

XPath://输入[contains(@ id,'_ name')]

答案 2 :(得分:0)

使用CSS,这也可以:RangeReplaceableCollection 这意味着:如果它包含'_name'