2017-01-17 208 views
0

我想要從agoda.com上搜索數據。我想通過語言,英語過濾所有評論。當我根據選擇器進行計數時,得到1,但是,當我嘗試點擊或等待元素可見時,程序在超時後拋出元素不可見異常。元素不可見Selenium

這是代碼我想到目前爲止

String url = "https://www.agoda.com/en-sg/resorts-world-sentosa-hard-rock-hotel/hotel/singapore-sg.html"; 
driver.get(url); 
try { 
    for (WebElement element: driver.findElements(By.xpath("//*[starts-with(@id, 'language-')]"))) { 
     if (element.getTagName().equalsIgnoreCase("input")) { 
      if (element.findElement(By.xpath("..")).getText().equalsIgnoreCase("english")) { 
       wait.until(ExpectedConditions.visibilityOf(element)); 
       element.click(); 
       break; 
      } 
     } 
    } 
}catch(Exception e){ 
    System.out.println(e.getMessage()); 
} 

我要去哪裏錯了?

+0

我看到'id'以'語言'開始沒有元素。明確你想要得到什麼元素。 – Andersson

+0

我指的是評論過濾器中的評論語言部分。 language-1是英文的複選框ID。 –

回答

1

請嘗試使用下面的代碼:

// To find and click on required check-box 
WebElement element = driver.findElement(By.xpath("//div[input[starts-with(@id, 'language-')]/span[text()='English']]")); 
Actions actions = new Actions(driver); 
actions.moveToElement(element); 
actions.click(); 
actions.perform(); 
0

從這裏不可能確定哪裏出了什麼問題,尤其是沒有從例外中複製粘貼的情況,但其中一個原因是存在但目前不可見的元素。它可能被壓制或從視口中移出。如果您在支持「開發人員」模式的瀏覽器(如Chrome)中打開該頁面,則可以查看元素屬性以確認或反駁該屬性。

備註: •發佈與您的問題有關的問題的完整信息。什麼是確切的異常,它的消息和幾行堆棧跟蹤? •如果可能,請從您的「開發者」視圖中發佈Web元素的詳細信息。 •不要抓住Exception,抓住特定的例外。 •複製並粘貼代碼片段,而不是重新輸入它們。如果您的實際代碼爲printlkn,那麼您遇到了更深層次的問題。

+0

感謝您的提示。我很抱歉給您帶來不便。我的代碼有點亂,所以我只是覺得重新打印會更好。不過,如果我檢查'driver.findElements(By.id(「language-1」))。size()',它會給我1.但是,它被點擊 –

相關問題