2017-11-05 8 views
0

にフレーム内の要素を見つけるために、どのように私はフレーム内の要素を見つけるためのコードの下に使用されるが、私は は親切にこのframebyinedex、framebystring、framebywebelementによって説明エラーました:はセレン

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class Framebyindex 
{ 
    public static void main(String[] args) 
    { 
     WebDriver f1=new FirefoxDriver(); 
     f1.get("http://spicareers.com/spicareers/"); 
     f1.switchTo().frame(1); 
     f1.findElement(By.linkText(" .Net - Senior Developer ")).click(); 
    } 
} 

エラーは次のとおりです。

を要素が見つかりません:{ "方法": "リンクテキスト"、 "選択": " - シニア開発ネット"}

スレッド "メイン" org.openqa.selenium.NoSuchElementExceptionで

例外

+0

私たちのページのHTMLコードをしてください与えます。 –

+0

空白を削除してください。 –

+0

空白を取り除くことで答えが得られました。フレンドリーにフレーム名を見つける方法を説明してください。 –

答えて

1

NoSuchElementExceptionは、あなたが尋ねたように、セレンがテキストとのリンクを検出しなかったという意味です。

by.xpathを使用して解決することをお勧めします。要素のxパスを取得するには、chromeまたはfirefoxブラウザで次の手順を実行します。

  1. inspectに(ここではリンク)要素に

  2. クリックをクリックします。ブラウザでインスペクションコンソール(Elementsタブ)を開き、クリックされた要素を強調表示します。右のように値を貼り付けBy.xpath

  3. By.linkTextを置き換える、あなたのコードでは

  4. コピーのXpath

  5. をコピーする選択要素]タブ内の要素に

  6. をクリックし

  7. 文字列には、xpath("you paste here")

それとも単純に、あなたはフレームに切り替えて前thisビデオ

+0

フレーム上のxpathの使い方は? –

+0

@Salman興味のある要素がiframeの内側にあるため、あなたの答えは機能しません。 –

+0

@Salman試して確認してください。 URLは質問のコードスニペットにあります。 –

2

を見る:

 driver.get("http://spicareers.com/spicareers/"); 
     WebElement frame= driver.findElement(By.xpath("//frame[@name='JRAMPSMainFrame']")); 
     driver.switchTo().frame(frame); 

とあなたと試みることができる後:最後に

 WebElement myEl= driver.findElement(By.xpath("//*[contains(text(), ' .Net - Senior Developer ')]")); 
     myEl.click(); 

、あなたがしたい場合戻す:

driver.switchTo().defaultContent(); 

EDIT

興味要素は名前 "JRAMPSMainFrame" とのiframe内にあります。あなたのhtmlを検査した場合、あなたはこの気づくことができます:

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

+0

私のHTMLコードに2つのフレームタグがあります。正しいフレーム名を見つけるにはどうすればいいですか?htmlコードの "JRAMPSHeader"としてフレーム名にしないでください。 –

+0

@PrakashMohanrajはい、あなたのHTMLには2つのiframeがあります。あなたは私の例で作ったように、興味のあるiframeを索引(あなたのコードで作ったもの)や(例えば) "name"属性(別のもの)で "見つける"ことができます。 –

+0

@PrakashMohanraj、要素がなぜ "JRAMPSMainFrame"という名前のiframeの中にあるのか不思議でしたら、私はその答えを編集しました。 –

1

を間違ったフレームまたは選択されているように思えますリンクテキストにはもっと多くのスペース。

この場合、Chromeデベロッパーツールはあなたの親友です。これを使用して要素を正しく見つけ、フレームを識別します。

SELECT FRAME

  1. はクロームでアプリケーションを開きます。
  2. オープン開発ツール
  3. 開発ツール

  4. のコンソール]タブをクリックし、一つだけのフレームがある上の写真では frame selector

ドロップダウンからフレームを選択します。

FINDのELEMENT

  1. フレームを選択した後、タイプ$x("//a[normalize-space(.) = '.Net - Senior Developer']")は、あなたのXPathをチェックします。

$x("")は、ブラウザのxpathを検査する機能です。

上記のメカニズムを使用すると、フレームと要素が見つかります。

乾杯!

0

.Net - Senior Developerがタグ内にあるとして、あなたがテキストでhttp://spicareers.com/spicareers/HTMLWebElementを詳しく見てみてください。

あなたはこのコードを使用することができます
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe"); 
WebDriver driver = new FirefoxDriver(); 
driver.get("http://spicareers.com/spicareers/"); 
driver.switchTo().frame("JRAMPSMainFrame"); //using "frame_name" 
WebElement elem = driver.findElement(By.xpath("//*[contains(text(), ' .Net - Senior Developer ')]")); 
elem.click(); 
+0

私のHTMLコードに2つのフレームタグがあります正しいフレーム名を見つけるにはどうすればいいですか?htmlコードの "JRAMPSHeader"としてフレーム名にするべきではない –

+0

".Net - Senior Developer"説明する? –

0

を、まずnameロケータを使用してフレームに入ると検索してみてください:だから意図WebElementにアクセスする前に、我々は次のように最初はframe_nameframe_idまたはframe_indexのいずれかを介してframeに切り替えてその後、

キャリアのオプションは、このコードを試してみてください、私はあなたのコードを変更した:

public class Framebyindex 
{ 
    public static void main(String[] args) 
    { 
     WebDriver f1=new FirefoxDriver(); 
     f1.get("http://spicareers.com/spicareers/"); 
     f1.switchTo().frame(f1.findElement(By.name("JRAMPSMainFrame"))); 
WebElement netCareer= f1.findElement(By.xpath("//*[contains(text(), ' .Net - Senior Developer ')]")); 
     netCareer.click(); 
    } 
} 
+0

私のHTMLコードで2つのフレームタグがあります正しいフレーム名を見つけるにはどうすればいいですか?htmlコードの "JRAMPSHeader"としてフレーム名にするべきではありません –

+0

正しいことは何でもuse.aaですフレーム名が正しいと思います – iamsankalp89