2016-09-21 105 views
0

我正在使用註冊頁面,我有基本字段,如稱呼,名字,姓氏和地址詳細信息。Selenium Webdriver自動完成下拉

稱呼下拉結構如下,

<div class="k-list-scroller" unselectable="on" style="height: 200px;"> 
<ul id="Salutation_listbox" class="k-list k-reset" unselectable="on" tabindex="-1" aria-hidden="false" aria-live="off" data-role="staticlist" role="listbox"> 
<li id="0741907a-4369-4ac2-8100-3829655a7522" class="k-item k-state-selected k-state-focused" data-offset-index="0" unselectable="on" role="option" tabindex="-1">Salutation</li> 
<li class="k-item" data-offset-index="1" unselectable="on" role="option" tabindex="-1" style="">Mr</li> 
<li class="k-item" data-offset-index="2" unselectable="on" role="option" tabindex="-1">Mrs</li> 
<li class="k-item" data-offset-index="3" unselectable="on" role="option" tabindex="-1">Miss</li> 
<li class="k-item" data-offset-index="4" unselectable="on" role="option" tabindex="-1">Ms</li> 
<li class="k-item" data-offset-index="5" unselectable="on" role="option" tabindex="-1">Dr</li> 
<li class="k-item" data-offset-index="6" unselectable="on" role="option" tabindex="-1">Prof</li> 
<li class="k-item" data-offset-index="7" unselectable="on" role="option" tabindex="-1">Rev</li> 
</ul> 

對於從下值我用下面的代碼降選擇先生,

String capColorDropDown = "//span[@role='listbox']"; 
driver.findElement(By.xpath(capColorDropDown)).click(); 

String itemName = "Orange"; 
String listId = "color_listbox"; 
Thread.sleep(2000); 

String xpathForItem = "//ul[@id='Salutation_listbox']/li[@class='k-item' and text()='Mr']"; 
driver.findElement(By.xpath(xpathForItem)).click(); 

此代碼工作對我很好我可以選擇Mr值來稱呼,但現在我必須完成地址詳細信息字段,其中城市字段是自動完成的下拉列表,其結構如下,

<div class="k-list-scroller" unselectable="on" style="height: auto;"> 
<ul id="AddressDetails_City_listbox" class="k-list k-reset" unselectable="on" tabindex="-1" aria-hidden="false" aria-live="polite" data-role="staticlist" role="listbox"> 
<li class="k-item" data-offset-index="0" unselectable="on" role="option" tabindex="-1" style="">ALPURRURULAM, NT, Australia, 4825</li> 
<li class="k-item" data-offset-index="1" unselectable="on" role="option" tabindex="-1">ALPURRURULAM, null, Invalid, </li> 
<li class="k-item" data-offset-index="2" unselectable="on" role="option" tabindex="-1">ALPURRURULAM, null, Invalid, </li> 
</ul> 

我試圖使用相同的代碼來訪問ALPURRURULAM,NT,澳大利亞,4825值,

String capColorDropDown1 = "//span[@role='listbox']"; 
driver.findElement(By.xpath(capColorDropDown1)).click(); 

String itemName1 = "Orange"; 
String listId1 = "color_listbox"; 
Thread.sleep(2000); 

String xpathForItem1 = "//ul[@AddressDetails_City_listbox']/li[@class='k-item' and text()='ALPURRURULAM, NT, Australia, 4825']"; 
driver.findElement(By.xpath(xpathForItem)).click(); 

但硒訪問//span[@role='listbox]和稱呼再次單擊下拉列表。這個城市領域也與listbox具有相同的作用,但我如何區分和選擇城市領域值?

回答

0

你應該嘗試使用更具體的定位如下: -

WebElement el = driver.findElement(By.id("AddressDetails_City_listbox")); 
el.click(); 

//now select desired option 
new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfNestedElementLocatedBy(el, By.cssSelector("li[data-offset-index='0']"))).click(); 
+0

在執行上面的評論,我收到錯誤消息ElementNotVisibleException:元素不可見 – user3836485

+0

@ user3836485在哪一行發生此異常?在異常之前打開了右下拉菜單? –

+0

首先執行這行'driver.findElement(By.id(「AddressDetails_City_listbox」))。click();'讓我知道這行是右鍵下拉或者拋出錯誤? –