java - 如何在分页的 web 表格中找到所需的值?
问题描述
该页面有一个分页的 webtable。我想浏览表格并检查是否不存在带有来自参数的文本的单元格 - 单击下一步按钮并再次检查
我试着写这样的东西。我编写了遍历行列表并从每行指定列下的单元格中获取文本的方法
protected GroupTableContainerComponent getContainerComponentByName(String groupCode) {
GroupTableContainerComponent result = null;
List<GroupTableContainerComponent> rows = getContainerComponents();
Iterator<GroupTableContainerComponent> i = rows.iterator();
while (i.hasNext()) {
GroupTableContainerComponent current = i.next();
if (!current.getGroupCodeText().toLowerCase().equals(groupCode.toLowerCase())) {
clickNextButton();
List<GroupTableContainerComponent> rows2 = getContainerComponents();
Iterator<GroupTableContainerComponent> j = rows2.iterator();
while (j.hasNext()){
GroupTableContainerComponent current2 = j.next();
if (current2.getGroupCodeText().toLowerCase().equals(groupCode.toLowerCase())){
}
}
}
result = current;
break;
}
if (result == null) {
throw new RuntimeException(String.format("Group with groupCode: %s not found", groupCode));
}
return result;
}
但是在单击下一步按钮后,我收到错误StaleElementReferenceException
我认为这是因为我的行列表包含上一页表中的旧行
这是我的 getContainerComponent()
public List<GroupTableContainerComponent> getContainerComponents() {
containerComponents = new ArrayList<>();
for (WebElement current : driver.findElements(By.xpath(groupTableContainerXpath))) {
containerComponents.add(new GroupTableContainerComponent(current));
}
return containerComponents;
}
和 Xpath
private final String groupTableContainerXpath = "//div[@class='table-container']/table/tbody/tr";
还有我的 getGroupCodeText()
public WebElement getGroupCode() {
WebElement groupsCode = groupTableComponent.findElement(groupCode);
return groupsCode;
}
public String getGroupCodeText() {
return getGroupCode().getText();
}
和 Xpath
private By groupCode = By.xpath(".//td[contains(@class,'cdk-column-group_name')]");
解决方案
我做到了,我决定在我的方法中创建列表。首先,我检查表的第一页中是否存在带有来自参数的文本的单元格,如果单元格不存在,我检查我的分页下一个按钮的状态,当它启用时,我点击它并等待第一个列表将是不可见的并且然后创建新列表并分配新值
protected GroupTableContainerComponent getContainerComponentByName(String groupCode) {
GroupTableContainerComponent result = null;
WebDriverWait waits = new WebDriverWait(driver, 10);
List<WebElement> rows = driver.findElements(By.xpath(groupTableContainerXpath));
List<GroupTableContainerComponent> containerComponents = new ArrayList<>();
for (WebElement current : rows) {
containerComponents.add(new GroupTableContainerComponent(current));
}
for (GroupTableContainerComponent current : containerComponents) {
System.out.println(current.getGroupCodeText());
if (current.getGroupCodeText().toLowerCase().equals(groupCode.toLowerCase())) {
result = current;
break;
}
}
if (result == null){
boolean isEnabled = isNextArrowEnabled();
while (isEnabled) {
clickNextButton();
waits.until(ExpectedConditions.invisibilityOfAllElements(rows));
List<WebElement> rows2 = waits.until(ExpectedConditions.visibilityOfAllElements(driver.findElements(By.xpath(groupTableContainerXpath))));
List<GroupTableContainerComponent> containerComponents2 = new ArrayList<>();
for (WebElement current2 : rows2) {
containerComponents2.add(new GroupTableContainerComponent(current2));
}
for (GroupTableContainerComponent current3 : containerComponents2) {
System.out.println(current3.getGroupCodeText());
if (current3.getGroupCodeText().toLowerCase().equals(groupCode.toLowerCase())) {
result = current3;
break;
}
}
if (result == null) {
if (isNextArrowEnabled()) isEnabled = true;
else isEnabled = false;
} else return result;
}
}
if (result == null) {
throw new RuntimeException(String.format("Group with groupCode: %s not found", groupCode));
}
return result;
推荐阅读
- javascript - unhandledrejection 事件不包含原因字段是什么意思?
- rust - Rust 生命周期问题
- angular - 如何一键编辑多个对象?角
- powershell - PowerShell 中的变量不等于 SSH 查询
- unity3d - 如何在 Unity 中修复 360 VR 记录器问题
- r - 在 R 中使用变量时无法按日期过滤数据
- node.js - 如何修复 docxtemplater 的“多重错误”?
- amazon-web-services - 如何在 Elastic Beanstalk 中部署 Revel 应用程序 (Golang)
- laravel - 搜索功能在 Laravel8 中获取 [路由未定义错误]
- html - 如何在我的网站上呈现 facebook 图片链接?