0

我有多個下拉列表,它們是在條件下動態創建的。Selenium webdriver不適用於使用java的多個動態下拉列表

我的Java代碼::

開始 - >

WebElement eleOpt = driver.findElement(By.xpath("//*[@id='id_0_" + value1+ "'" + "]/div/div")); 
eleOpt.click(); 

Thread.sleep(200); 

WebElement clickSelectedEle = driver.findElement(By.xpath("//custom-select[@id='id_0_" + value1+ "'" + "]/div/div[2]/ul/li[" + Integer.parseInt(value2) + "]")); 
clickSelectedEle.click(); 

注:數值和value2都將在法傳遞的動態值。

自動2個下拉菜單越來越自動點擊,但對於第三個它下面的錯誤投擲:

錯誤 -

org.openqa.selenium.NoSuchElementException: Unable to locate element: //custom-select[@id='id_0_2']/div/div[2]/ul/li[0]

HTML代碼(角2):

<caption class="blind">{{a11y}} {{name}}.</caption> 

<div class="static" (click)="toggle()"> 
    <div class="selected"> 
     {{name}} 
    </div> 
</div> 

<div class="open"> 
    <ul> 
     <li id='{{option.code}}' (click)="changeval(option.code || option.id)" *ngFor="let option of options; let i = index" [ngClass]="{ 'active' : (selected && selected===i) }"> 
      <caption class="blind">option: {{option.name}}.</caption> 
      <span>{{option.name}}</span> 
     </li> 
    </ul> 
</div> 

請建議可以做些什麼。

+0

添加相關的HTML。 – Guy

+0

很抱歉忘了把html代碼。我編輯過。謝謝。 –

回答

0

一種選擇是添加硒wait.until條件

WebDriverWait wait = new WebDriverWait(getDriver(), 10); 
wait.until(ExpectedConditions.presenceOfElementLocated(By.css("YourCssPath"))); 

您也可以使用任何By.class,ID,...選項,我更喜歡使用By.class,或By.id在地方使用CSS或正則表達式,第一個選項是更快

+0

我明白了。但爲什麼它爲2下拉和第三個投擲錯誤工作。我想知道這一點。 –

+0

可能對於一些競爭條件,如果你將睡眠時間改爲15-20秒很容易 – cralfaro

0

200毫秒是真的少了時間。作爲@cralffaro曾建議使用WebDriverWait或執行動作FluentWait

代碼之前,您應該使用FluentWait

WebElement waitsss(WebDriver driver, By elementIdentifier){ 
    Wait<WebDriver> wait = 
       new FluentWait<WebDriver>(driver).withTimeout(60, TimeUnit.SECONDS) 
               .pollingEvery(1, TimeUnit.SECONDS) 
               .ignoring(NoSuchElementException.class); 

     return wait.until(new Function<WebDriver, WebElement>() 
       { 
        public WebElement apply(WebDriver driver) { 
          return driver.findElement(elementIdentifier); 
        } 
       }); 
} 
相關問題