我使用Selenium 2.0,Firefox 11.0和Java來處理表。我有一個由td單元組成的表格元素,其中一些包含span元素中包含的文本,另一些包含其值屬性中具有文本的輸入元素。我的目標是獲取每個單元格的文本,以便可以輸出表格內容並將其與預期值進行比較。我以爲我會只是做這樣的事情:Selenium相對定位器從WebElement極其緩慢的搜索
Locate the table WebElement by id
List<WebElement> cells = tableElem.findElements(By.xpath(".//td"));
然後,我將通過所有的細胞,並與XPath的「.//input」運行findElements,如果該列表是空的我會在webElement運行循環的getText ,如果列表不是空的,我會在輸入元素上運行getAttribute。
但令我驚訝的是,這花了幾分鐘在Firefox上運行(我不敢嘗試IE瀏覽器,它應該在哪裏測試)。當我調試時,很顯然,瓶頸是//輸入搜索td,這正在殺死我。這是十秒鐘以上,所以即使只有幾個細胞,我的測試也將持續進行。我已經嘗試了各種各樣的xpath的小變化,嘗試去css選擇器,並繼續得到相同的結果。
我希望得到一些關於如何解決這個問題的建議,或者如何優化我當前的方法。我希望這隻需要幾秒鐘。
我已經包含了一些示例代碼,應該說明我正在經歷的減速。這不是網站我刮屏幕,但緩慢是相同的:
webDriver.navigate().to("https://accounts.google.com/NewAccount");
List<WebElement> TDxpath = webDriver.findElements(By.xpath("//td"));
List<WebElement> TDcss = webDriver.findElements(By.cssSelector("td"));
for (WebElement td : TDcss) {
List<WebElement> q = td.findElements(By.cssSelector("input"));
}
for (WebElement td : TDxpath) {
List<WebElement> r = td.findElements(By.xpath(".//input"));
}
硒哪個版本您使用的? 需要2.8秒才能在我的機器上執行您的代碼。這與打開頁面一起。代碼是好的,你的環境肯定有問題。 – JacekM