2017-04-24 54 views
-2

嗨我嘗試使用下面的代碼來使用從foodpanda網站的下拉列表,並選擇城市名稱,但它不適合我。下拉不與硒這個網站

public static void main(String args[]) throws InterruptedException{ 
     System.setProperty("webdriver.chrome.driver","C:/chromedriver.exe"); 
     WebDriver driver = new ChromeDriver(); 
     driver.get("https://www.foodpanda.in/restaurants/city/pune?gclid=CIbFi5iEvdMCFdeFaAodujsK5w"); 
     Thread.sleep(5000); 


     WebElement drp =driver.findElement(By.id("cityId")); 
     Select drp2 = new Select(drp); 
     drp2.selectByVisibleText("Bangalore"); 

它給出了在線程的錯誤 - 異常「主要」 org.openqa.selenium.ElementNotVisibleException:元素不可見:元素當前不可見,不得操縱

+0

爲什麼不工作? – alayor

+0

它說 - ElementNotVisibleException:元素不可見:元素當前不可見,可能不會被操縱 –

+0

爲什麼不嘗試'ExplicitWait'? – Paras

回答

1

<select>元件CSS display: none;。它只是一個佔位符。 我認爲該網站使用一些花哨的<span> s來獲得下拉的真棒外觀。你能檢查一下嗎?

0

所以我試圖弄清楚下拉是如何工作的&這裏是我發現的。 select只是一個佔位符,它在網頁上沒有任何作用。當單擊input框(請參見下文)時,將使用javascript調用填充下拉列表。

enter image description here

一旦點擊input箱內,一些DOM元素添加含有<p>標籤與城市名稱,點擊它時,選擇您要選擇的目標城市。

基於我的觀察,當輸入元素被點擊時,類名爲tt-suggestionsspan是可見的。此span內有div,其中包含所有p元素。您應該瞄準點擊相應的p元素,其中包含您想要的城市名稱的文本。

這裏有一個工作代碼:

WebDriverWait wait = new WebDriverWait(driver, 30); 
driver.findElement(
    By.xpath("//input[@class='form-control twitter-typeahead tt-input']") 
).click(); // this will click inside the input element 
WebElement drp = (WebElement) wait.until(ExpectedConditions.presenceOfElementLocated(
       By.xpath("//span[@class='tt-suggestions']"))); // this is the span element which gets populated 
System.out.println(drp.getAttribute("innerHTML")); // just in case you want to see the above span's HTML code 
drp.findElement(By.xpath("//div/p[text()[contains(.,'Bangalore')]]")).click(); // This will select Bangalore from the Dropdown 
+0

您好我在線程「main」中添加wait-異常之後出現此錯誤org.openqa.selenium.TimeoutException:在等待By.id定位的元素的可見性30秒後超時:cityId –

+0

@Jayesh Doolani,No,the元素是永久不可見的,所以selenium click不可能在這個地方(因爲selectByVisibleText在內部做點擊操作)。 – RAJ

+0

@SladeWilsonXXX我修改了我的答案。嘗試這個 –