自动化规范 - 基于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,请告诉我。
答案 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