我有我的 selenium 代碼,它可以提取列表中可用的名稱列表。現在我想存儲與全局相同的名稱以備后用。請幫忙。我已經嘗試過數組處理,它只對每一行進行處理,而不是對值進行處理。List<WebElement> allText = driver.findElements(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"));int total = allText.size();System.out.println(total);for(int i=3;i<=total;i++){ CaselevelSigningCMs =driver.findElement(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"+"["+i+"]"+"/td[2]")).getText(); System.out.println(CaselevelSigningCMs);}我應該得到這樣的名字:Ranjit Nyk、Sudhanva G...。我必須在其他類/方法的其他頁面中驗證這些名稱。CaselevelSigningCMs 是一個全局變量,它只提取單個項目。我需要定義為全局的類似數組,以便它可以提取多個項目。CaselevelSigningCMs =driver.findElement(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"+"["+i+"]"+"/td[2]")).getText();
3 回答
MM們
TA貢獻1886條經驗 獲得超2個贊
查看此 String CaselevelSigningCMs 是如何定義的。就像那樣去 ArrayList
可以說使用的字符串是在某些地方定義的
public String CaselevelSigningCMs = "";
同樣定義ArrayList
public List<String> collectedItems=new ArrayList<>();
在循環中添加獲取每個元素的文本,比如
collectedItems.add(driver.findElement(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"+"["+i+"]"+"/td[2]")).getText());
蕭十郎
TA貢獻1815條經驗 獲得超13個贊
您可以使用Stream.map() 函數一次性將WebElements列表轉換為包含元素文本屬性的字符串列表:
List<String> allText = driver.findElements(By.xpath("//*[@id='pnlLeftMenu']/table/tbody/tr/td[2]/table[2]/tbody/tr[3]/td/table/tbody/tr"))
.stream()
.map(WebElement::getText)
.collect(Collectors.toList());
allText.forEach(System.out::println);我也不太喜歡您的 XPath 表達式,尤其是:
//*通配符這些
table[2]和tr[3]
通配符表達式需要更長的時間來執行并消耗更多的資源,并且您的方法似乎非常依賴DOM結構,因此我建議使用XPath 軸以及XPath 函數/運算符來使您的表達式盡可能相關、健壯和可靠。
您還可以考慮使用HtmlElements框架的Table類來處理 HTML表格
BIG陽
TA貢獻1859條經驗 獲得超6個贊
You can use Arraylist to store and retrieve them
數組列表 ts=new ArrayList();
將對象存儲在數組列表中
ts.add();
添加回答
舉報
0/150
提交
取消
