我有一些200個元素是誰的加價如下:驗證頁面上的200名單元素的webdriver
<span id="1356329740258" class="pagename">Sport & leisure</span>
<span id="1356329740259" class="pagename">Food & drink</span>
<span id="1356329740260" class="pagename">Household</span>
<span id="1356329740261" class="pagename">Gardening</span>
我可以用webdriver的訪問它們在一個相當醜陋的方式:
List<WebElement> elements;
elements = driver.findElements(By.xpath(".//*[starts-with(@id, '135')]"));
...因爲每個都以'135'開始。 但driver.findElement(By.cssSelector(".pagename");
......不工作,也許事情做的'標籤
我現在需要做的,是對列表中的每個元素做.getText(),並驗證其對預期,相應的數組值。我開始關閉該方法的想法是:
String[] expected = {"Sport & leisure", "Food & drink", "Household", "Gardening"};
List<WebElement> elements = select.find.Elements(By.xpath(".//*[starts-with(@id,'135')]"));
// compare #array items with #found elements in List
if (expected.length != elements.size()) {
System.out.println("the wrong number of elements were found");
}
// check value of every pagename class element equals expected value
for (int i = 0; i < expected.length; i++) {
String elementsValue = elements.get(i).getAttribute("value");
if (elementsValue.equals(expected[i])) {
System.out.println("passed on: " + elements);
} else {
System.out.println("failed on: " + elements);
}
}
這具有潛在的具有存儲在陣列中200個奇數文本串的明顯的限制,因此將變得笨拙。有沒有更優雅的解決方案?我可以從.csv中讀取數組值,並使用Parameterized runner,但是仍然需要在構造函數中聲明每個值。
至於你的問題「有沒有更優雅的解決方案?」我認爲你做這件事的方式非常優雅。你正在循環着每一個,我認爲這非常好。不確定是否真的有「更好」的解決方案。 – sircapsalot
謝謝。感謝您的意見 – Steerpike
公平警告 - 'WebDriver.findElements()'不指定元素的順序。您的循環可能會或可能不會工作,並且結果可能會因您使用的瀏覽器驅動程序而異。 –