【发布时间】:2019-03-09 14:39:47
【问题描述】:
即使我在使用 @FindBy 注释时从列表中删除了一个元素,我也会将列表的大小设为 3。
当我在没有 @FindBy 注释的情况下执行我的代码时,我得到正确的列表大小为 2。
列表包含以下元素:[讲师、课程、价格]
请帮助我为什么会出现这两种行为?
public class TestClass {
static WebDriver driver;
@FindBy(xpath = "//th")
public List<WebElement> columns;
List<WebElement> columnNames = new ArrayList<>();
public void initMethod() {
PageFactory.initElements(driver, this);
}
public List<WebElement> getColumns() {
// output of below line = Initial columns list size 3
System.out.println("Initial columns list size " + columns.size());
for (int i = 0; i < columns.size(); i++) {
System.out.println(columns.get(i).getText());
if (columns.get(i).getText().equals("Instructor"))
columns.remove(i);
}
// output of below line = After modification column list size 3
System.out.println("After modification column list size " + columns.size());
return columns;
}
public static void main(String[] args) {
System.setProperty("webdriver.chrome.driver", "F://chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://www.qaclickacademy.com/practice.php");
TestClass test = new TestClass();
test.initMethod();
test.getColumns();
}
}
【问题讨论】:
-
Selenium 注入哪种 List?可能是它是一个不可变的列表,您需要重新分配它。
-
@LppEdd,我猜 Selenium 注入可变列表不确定
-
调试一下看看。如果您确定元素是正确的,这是唯一的原因。
-
@LppEdd,甚至官方文档也没有提到任何关于列表不变性的内容
-
调试它。这是唯一真正的解决方案。