如何使用WebDriver找到Dynamic WebElement

时间:2013-11-07 07:07:56

标签: java automation webdriver selenium-webdriver ui-automation

自动化规范 - 基于Java的WebDriver

您好
我正在使用webdriver自动化(Java代码)来自动预订公交车。
这是我的方案....

  

(1)给出发&目的地 - 完成
  (2)选择日期 - 完成
  (3)搜索总线 - 完成
  (4)查看座位&选择 - 我在这里

现在作为搜索结果,我得到了一个公共汽车列表,可以选择查看座位。 总线列表显示在 dynamic-DataTable 中,其中包含每行中名为“ view seat ”的图像。点击 viewseat-image 将为我提供座位布局,我可以在其中选择座位。发现viewseat-images有不同的id & 相同的班级名称。现在我需要使用它的id找到并点击我想要的viewseat-image。
但情况是
*数据表是动态的,因此id不断变化,不允许我通过静态id定位它 * id是该编码中唯一可以将viewseat图像与另一个图像区分开来的唯一东西。所以我只有在我的身份证明正确的情况下才能找到它。

现在我的想法是,获取所有viewseat-images的运行时ID,使用唯一的类名并存储在变量中,并使用id来定位元素。
因此,如果有可能使用类名获取该数据表中所有图像的id,请告诉我。

4 个答案:

答案 0 :(得分:0)

List<WebElement> elements = driver.findElements(By.className("classname"));    

for(WebElement ele : elements) {
    System.out.println(ele.getAttribute("id"));
} 

答案 1 :(得分:0)

你可以使用绝对路径并占用座位的位置,这将减少你的努力,采取你可以在firefox中安装一个名为“firepath”的插件的绝对路径,安装后你可以选择AbsolutePath或RelativePath。使用绝对路径,您无需使用ID来标识动态创建的元素。使用标记中元素的位置来标识路径。

绝对路径示例: //div/div/div/table/tbody/tr/td[2]/div/input[3]

答案 2 :(得分:0)

driver.findElement(By.xpath("//a[text()='View seats']")).get(index).click()

你可以尝试这种方法。但我不确定它是否可以解决。我正在寻找一种可以解决动态页面问题的一般方法。

答案 3 :(得分:0)

这里当动态数据表即将到来时,您可以存储表中的大小,如:

 int size = driver.findElements(By.xpath("//*[@id='demo_ID']/tbody/tr")).size();

并且可以设置一个循环来读取表格的每个可用行,或者您可以逐个点击它们。喜欢:

String strGetContent = text.getText();
or
text.click(); // As per your need 

现在你可以阅读或点击表格的每一行,虽然行是动态的。我希望它对你有帮助!

如需更多解释或示例,我更喜欢:How to Automate a Dynamic page through Selenium Web Driver