2016-11-11 150 views
0

我試圖在txtStockOnHand字段中輸入一個值。但是,它總是拋出一個錯誤org.openqa.selenium.TimeoutException:等待元素可點擊30秒後超時:By.id:txtStockOnHand即使我等待元素可點擊。即使我等待元素可點擊30秒,元素也無法點擊

硒Java代碼:

@FindBy(how = How.ID, using = "txtStockOnHand") 
static WebElement txtStockOnHand; 

public void waitForClickable(String strElementID){ 
    wait.until(ExpectedConditions.elementToBeClickable(By. id(strElementID)));   
} 

// Set SOH in SOH textbox 
public void setStockOnHand(String strStockOnHand){ 
    txtStockOnHand.sendKeys(strStockOnHand); 
} 

public void enterStockOnHand(String strStockOnHand){ 
    this.waitForClickable("txtStockOnHand");   
    this.setStockOnHand(strStockOnHand); 
    txtStockOnHand.sendKeys(Keys.TAB); 
} 

HTML代碼:

回答

0

爲了解決這個問題,我用的Thread.sleep方法做了一段時間整個線程停止然後再繼續一段時間後。

我不知道爲什麼wait.until(可見性)和wait.until(可點擊)不能以某種方式運行。

我希望這個幫助。

// Set SOH in SOH textbox 
    public void setStockOnHand(String strStockOnHand){ 
     try {Thread.sleep(3000);} //3000 for 3 second because it is in millisecond format 
     catch (InterruptedException e) {e.printStackTrace();} 
     txtStockOnHand.sendKeys(strStockOnHand); 
    } 

只是把它放在任何地方,然後再繼續其他事情。

可以在睡眠時間改變的值,你也可以把它放在一個變量:)

HappyCoding

+0

我添加了thread.sleep(1000)到enterStockOnHand方法。它仍然沒有工作。它引發org.openqa.selenium.ElementNotVisibleException:元素不可見的錯誤。 –

+0

你把它放在哪裏?在你調用該方法之前?或者在txtStockOnHand.sendKeys(strStockOnHand)之前調用該方法之後;? – jace

+0

我敢打賭你必須把它放在方法裏面。沒有什麼會改變,如果你把它放在方法之外,因爲硒仍然會發現元素strStockOnHand,到那時真的還不可見 – jace

0

如果了Thread.sleep沒有爲你工作,要麼,我想這是因爲幾個要素你的頁面有相同的ID,第一個元素被隱藏。即使id應該是獨一無二的,我已經遇到過這種情況。
你可以檢查你的元素的ID是否真的獨一無二?如果它不起作用,你能分享你的HTML代碼嗎?

+0

我的ID是唯一的。這裏是HTML代碼: