2017-09-12 31 views
-1

我想創建一個基本的登錄自動測試,但頁面上的submit按鈕沒有獨特的class name, and id,那麼怎麼做我找到它了?查找元素沒有id,類或名稱(webdriver/Eclipse/Java /自動化)

該按鈕的HTML低於:

<button class="btn btn-primary" type="submit" style="float:right;width:120px">Sign in</button> 

有一個忘記密碼按鈕共享同一類,但不同的「類型」:

<button class="btn btn-primary" type="button" style="float:left;width:140px;padding-left:10px" onclick="showForgotPassword()">Forgotten Password?</button> 

我曾嘗試下面的代碼,但它不適合我。

driver.findElement(By.className("btn btn-primary")).click(); 

,如果你能請你們幫忙,並期待着你們的來信。

+1

你可以1)給元素添加一個id,或者2)(Selenium示例)假設這個頁面很少會改變,通過元素文本 查找驅動程序。find_elements_by_xpath(「// * [contains(text(),'My Button')]」)' – Jared

+0

您是否無法使用您共享的代碼訪問元素? – nullpointer

+0

我編輯了我的答案,以包含類 – Kudin

回答

0

Xpath和Firebug在運行webdriver測試時互相沒有關係。你總是可以使用xpath。

編輯:

您仍然可以通過打開開發者工具(按F12)測試在Firefox XPath表達式 - >單擊控制檯選項卡,並使用命令$ x( 「%XPATH%」),輸入你的表達在你的情況下,命令應該是這樣:

$x("//button[text()='Sign in']") 

回車,你會看到輸出數組[元]的情況下,一個元素符合項目,數組[部件1,element2的如果多個匹配被發現和Array []如果什麼都不符合你的表情

關於如何找到您的按鈕,這裏有幾種解決方案:

1)(假設ID「loginField」我提供的其實是你的登錄域的ID),您可以只使用提交()

driver.findElement(By.xpath("//button[text()='Sign in']")).click(); 

3)關於CLAS:登錄/密碼的元件上的方法

// Or just reference the login field as you did before, doesn't have to be id 
WebElement loginField = driver.findElement(By.id("loginField")); 
loginField.submit(); 

2)可以通過的xpath調用它SNAME - 你將需要使用cssSelector代替:

driver.findElement(By.cssSelector("button.btn.btn-primary[type='submit']")).click(); 

這是因爲類名不適合多類好工作,當你在元素的類屬性的空間,這意味着它是兩者的成員「 btn「和」btn-primary「類,但不是它是」btn btn-primary「類的成員。

+0

的搜索,其中是您使用的問題中的'loginField'? – nullpointer

+0

假設沒有提供登錄字段代碼的ID – Kudin

+0

並非每個元素都必須具有「id」.. *假定id *可能在此情況下失敗。 – nullpointer

0

請試試以下代碼。

driver.findElement(By.xpath("//button[text()='Sign in']")).click(); 

說明的XPath: -基於按鈕上的文字Sign in,使用上面xpath點擊Sign in按鈕。

+0

嗨耆那教,謝謝你。這是相當複雜的,我試圖按照它,但錯誤的按鈕已被引用 – jvickery88

+0

按鈕的HTML是在上面的問題,'提交'按鈕。我把你引用的另一個按鈕顯示他們共享相同的類,這是難度來自 – jvickery88

+0

我已經提供了每個xpath的正確解釋,所以我想你應該接受我的答案。因爲通過這個解釋你可以創建相對的xpath。 –

相關問題