2016-04-12 9 views
-1

私はWebページを自動化するセレンスクリプトを作成しています。私はリスト内で定義されたボタンをクリックする必要があります。リスト内で定義されたボタンを見つける方法は?

これは私のウェブUIの画像です - New Account私は

Image

に言及していボタンですこれは私のXMLコードです:

<div id="00B4E000000LQ2C_topNav" class="topNav primaryPalette"> 
    <div id="00B4E000000LQ2C_subNav" class="subNav"> 
    <div class="linkBar brandSecondaryBrd"> 
     <div id="00B4E000000LQ2C_listButtons" class="listButtons"> 
     <ul class="piped"> 
      <li> 
      <input class="btn" type="button" title="New Account"  onclick="navigateToUrl('/setup/ui/recordtypeselect.jsp?ent=Account&ekp=001&retURL=%2F001%3Ffcf%3D00B4E000000LQ2C%26isdtp%3Dnv%26nonce%3Df8007ad94993912b7ff4149193a6096ccfed4ebb1454e0b9b310ad14b61de71d%26sfdcIFrameOrigin%3Dhttps%253A%252F%252Fcs83.salesforce.com&save_new_url=%2F001%2Fe%3FretURL%3D%252F001%253Ffcf%253D00B4E000000LQ2C%2526isdtp%253Dnv%2526nonce%253Df8007ad94993912b7ff4149193a6096ccfed4ebb1454e0b9b310ad14b61de71d%2526sfdcIFrameOrigin%253Dhttps%25253A%25252F%25252Fcs83.salesforce.com&isdtp=vw','LIST_VIEW','new');" name="new" value="New Account"/> 
      </li> 
      <li class="lastItem"> 
     </ul> 

私が使用:

driver.findElement(By.xpath(".//*[@id='00B4E000000LQ2C_listButtons']/ul/li[1]/input")).click(); 

(Xパスはファイヤーバグによって与えられました)が、私にn個のエラーは、このボタンを見つける/スクリプト私を助けてください

要素

を見つけることができない

を述べます。

+0

セマンティッククラス名を与えて、それを選択するのはなぜですか? JS内では、要素(by.css( '.js-new-account-button'))のような何かをします:click(); ' – Narxx

+0

あなたは奇妙な1リの後。それは実際のコードですか? – splash58

+0

@ splash58 1を押すと、画像へのリンクになります。おそらくそれはブラケットのためにそれをそのように解析しました。 – Narxx

答えて

0

こんにちはでの作業

// first way 
driver.findElement(By.xpath("//*[@name='new']")).click(); 
// second way 
driver.findElement(By.xpath("//*[@class='btn']")).click(); 
// basically you can use various attributes of input tag with button inside the xpath to click 

以下のアップデートのようにしてみてください私のフレーム

// A short way to identify how many iframe's are present on a web page 

List<WebElement> numberOfFrames= driver.findElements(By.tagName("iframe")); 
System.out.println("Total Number of iframes present are : " +numberOfFrames.size()); 
for(int i=0;i<numberOfFrames.size();i++){ 
    // here u can identify iframes with any of its attribute vale say name,title or which is most suitable. 
    System.out.println("Name of the i-frames : " + numberOfFrames.get(i).getAttribute("name")); 
} 

// Back to your question - button lies inside iframe hence 
// key here is before clicking you have to switch to the frame first 

driver.switchTo().frame(driver.findElement(By.name("frame name"))); 

希望これはあなたに役立ちます

+0

あなたのお返事ありがとうございます。私は試した 。まだ同じエラー要素を見つけることができません – Chaitanya

+0

奇妙な。コンソールで要素エラーを見つけることができないのですか?はいの場合は、クリックしたいボタンがi-frame内にないことを確認してください。また、コードの同期を管理していない場合は@ alecxeのリンクを使用してください。 –

+0

はい、コンソールにエラーが表示されます。クリックしたいボタンはi-frameの内側にあると思います。画像が添付されていますか? x-pathの近くのほとんどの部分がi-frameについて言及しました。これで私を助けてもらえますか? – Chaitanya

1

Firebugで生成されたXPathを使用したり、途中で要素の親をチェックしたりする必要はありません。私たちはより良い、あなたはより信頼性の要素を見つけるための簡単な方法を書くことができます行うことができます。

driver.findElement(By.name("new")); 

か:

driver.findElement(By.cssSelector("input[name=new]")); 

か:

driver.findElement(By.cssSelector("input[value='New Account']")); 

。なお、あなたが持っているXPath式は有効です。タイミングの問題が発生している可能性があり、要素の存在、可視性またはクリック可能性を待つ必要があります。How to wait until an element is present in Selenium?を参照してください。

そして、ボタンがiframe内にある場合、あなたはそのコンテキストに切り替えるだけにして、ボタンを検索する必要があります。

driver.switchTo().frame("ext-comp-1005"); 
+0

あなたは '( 'input [name =" New Account "]')'を意味します。 'value'はユーザーが入力すると明らかに変化します。 – Narxx

+1

@Narxxよく、私はユーザーがボタンの値を変更することができないだろうと確信しています:) – alecxe

+0

あなたの返信ありがとうございます。私は試した 。それでも同じエラーが発生しました – Chaitanya

関連する問題