Java 如何使用WebDriver定位动态WebElement

Java 如何使用WebDriver定位动态WebElement,java,automation,webdriver,selenium-webdriver,ui-automation,Java,Automation,Webdriver,Selenium Webdriver,Ui Automation,自动化规范-基于Java的WebDriver 嗨 我正在开发一个webdriver自动化(Java代码)来自动化公交车预订 (1) 给出出发地点和目的地-完成 (2) 选择日期-完成 (3) 搜索总线-完成 (4) 查看座位并选择-我在这里点击了 现在作为一个搜索结果,我得到了一个巴士列表,可以选择查看座位。 总线列表显示在动态数据表中,该表每行包含一个名为“查看座椅”的图像。单击viewseat图像将显示座椅布局,我可以在其中选择座椅。发现viewseat图像具有不同的id,相同的类名。现在,

自动化规范-基于Java的WebDriver


我正在开发一个webdriver自动化(Java代码)来自动化公交车预订

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

现在作为一个搜索结果,我得到了一个巴士列表,可以选择查看座位。 总线列表显示在动态数据表中,该表每行包含一个名为“查看座椅”的图像。单击viewseat图像将显示座椅布局,我可以在其中选择座椅。发现viewseat图像具有不同的id相同的类名。现在,我需要使用viewseat图像的id找到并单击我想要的任何图像。
但情况是
*数据表是动态的,因此id不断变化,这不允许我通过静态id定位它。
*id是该编码中唯一能将viewseat图像与其他图像区分开来的东西。因此,只有在id正确的情况下,我才能找到它。

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

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

for(WebElement ele : elements) {
    System.out.println(ele.getAttribute("id"));
} 
for(WebElement ele:elements){ System.out.println(ele.getAttribute(“id”); }
您可以使用绝对路径并选择座位的位置,这将减少您的工作量。要选择绝对路径,您可以在firefox中安装一个名为“firepath”的插件,安装后,您可以选择AbsolutePath或RelativePath。对于绝对路径,您不需要使用ID来标识动态创建的元素。使用标记中元素的位置标识路径

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

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

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

当动态数据表出现时,您可以在表中存储的大小,如:

 int size = driver.findElements(By.xpath("//*[@id='demo_ID']/tbody/tr")).size();
可以设置一个循环来读取表中的每一行,也可以逐个单击它们。比如:

String strGetContent = text.getText();
or
text.click(); // As per your need 
现在您可以阅读或单击表中的每一行,尽管行是动态出现的。我希望这对您有所帮助


关于更多解释或示例,我更喜欢:

您是否尝试过使用不同的选择器而不是座椅ID?Xpath、CSS等。如果您可以提供一个html代码片段作为问题的一部分,将更容易为您提供帮助。我尝试了。但是我只能在HTML中找到ID和类名。下面是上面提到的viewseat图像的HTML代码<代码>除了ID、名称、类名等之外,还有其他选择器。有时您需要使用xpath或css的“更丑”方法。如果你能在表格的某个部分中添加html片段,而不仅仅是锚定的html片段,我可以尝试为你指出正确的方向。谢谢@MarkRowlands。我也在寻找类名、名称、CSS选择器。但我找不到。我们的开发人员正在使用hte DataTable而不是Grid视图来显示这个列表。因此,如果您给出这个表的HTML片段,它将非常困难,因为它包含一个非常糟糕的css标记。所以,我给大家介绍一下这个表的概况。表中包含了一些列,如TRAVELS NAME、DEP TIME、ARRIV TIME、PRICE,最后是VIEWSEAT image。因此,我仅为travel operator和VIEWSEAT提供了一个片段<代码>