2015-06-03 106 views
2

希望有人可以幫我解決我的問題。我花了大部分時間嘗試幾乎所有可以在這裏或通過Google找到的解決方案。Selenium Webdriver - 無法點擊按鈕 - 查找元素

我會切入正題。我有一個測試,在一個屏幕上登錄。第二個屏幕選擇一個角色並繼續前進。我能夠進入角色選擇屏幕,但無法前進,因爲Selenium不會點擊按鈕,無論我做什麼。

有趣的是,這將與IDE一起工作,但將代碼導出到java並使用webdriver運行它也不起作用。這部分對我來說毫無意義,因爲我認爲IDE導出應該很容易運行。唯一的區別是我可以看到,webdriver提取了一個無配置文件的Firefox,而IDE運行在我的配置文件中 - 不確定這與它有什麼關係,但是想把它扔到那裏。

第一個按鈕和第二個按鈕之間的唯一區別是HTML中的自動對焦命令。

​​

整個網頁,我已經試過了最後一件事,發現我已經嘗試了多種解決方案是

new WebDriverWait(driver,120).until(ExpectedConditions.elementToBeSelected(By.name("submit"))); 
    driver.findElement(By.name("submit")).click(); 

這也不起作用。我已經嘗試了幾個變種,並且大多數時候webdriver會超時或跳過這一步,然後傳遞它,然後在頁面未前移時繼續執行下一步。

有沒有人有任何建議?如果您有任何問題,或者如果我沒有給出足夠的信息,我可以給您更多信息!任何與此有關的幫助都將是驚人的,因爲我花了一天的大部分時間試圖解決這個問題。

謝謝!

回答

3

有時選擇器是這種情況下的主要問題。此外,name="submit"甚至不是一個非常安全的選擇器,因爲開發人員傾向於在表單中複製相同的屬性。不知道實際的元素,我幾乎可以告訴你問題是選擇器。如果文本圍棋是按鈕的頁面上的純文本,給下面的XPath射門

//button[@name='submit'][@type='submit'][contains(text(),'Go')] 

完整的實現應該像下面這樣:

By xpath = By.xpath("//button[@name='submit'][@type='submit'][contains(text(),'Go')]"); 
WebElement myDynamicElement = (new WebDriverWait(driver, 10)) 
    .until(ExpectedConditions.presenceOfElementLocated(xpath)); 

myDynamicElement.click(); 
+1

感謝您的答覆!但是,它仍然給我的問題。運行時出現以下錯誤: 引起:org.openqa.selenium.InvalidSelectorException:給定選擇器//按鈕[@ name ='submit'] [@ type ='submit'] [containts(text( ),'Go')]無效或不會導致WebElement。發生以下錯誤: InvalidSelectorError:找不到xpath表達式的元素//按鈕[@ name ='submit'] [@ type ='submit'] [containts(text(),'Go')]因爲以下錯誤: SyntaxError:該表達式不是一個合法的表達式。 – automationk

+0

我很抱歉'contains()'中存在拼寫錯誤。更正後,請再試一次 – Saifur

+1

非常感謝!那很完美。 – automationk