2017-01-26 28 views
-1

私はツールSeleniumを使用して自動化を学習しようとする初心者です。私はこのウェブサイトを自動化しようとしています - http://newtours.demoaut.com/Selenium webdriverでradio radio bottonを見つけることができません

私はログインし、このラジオボタン(片道、ラウンドウェイ)でフライトファインダーにアクセスしようとしています。 しかし、私はエラーUnable to locate the elementを得ています。

次のように試してみてください。

  1. から取得した要素を見つけようとしました。firebugから取得しました。

    //*[@type='radio']//*[@value='oneway'] 
    
    //*[contains(@type,'radio')] 
    
    //*[contains(text(),'oneway'] 
    
    //input[@type='radio' AND @value='oneway'] 
    
  2. ラジオボタンを配置するhtmlコードから構成される次のXPathを使用し

  3. も素子を配置するCSS selectorを試みました。 firebugから得られた

    driver.findElement(By.cssSelector("input[type=radio][value=oneway]")) 
    

ラジオボタンの HTMLスクリプトを implicit waitを使用して待ち時間を追加しようとした thread.sleepです - 下記の

input type="radio" checked="" value="roundtrip" name="tripType" 

      Round Trip  

input type="radio" value="oneway" name="tripType" 

       One Way 

は私のコードです -

package gurutrial2; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait; 
import org.testng.Assert; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.Test; 

public class gurutrial2 
{ 

    public static WebDriver driver; 

    @BeforeTest 

    public final void preTest() { 

     System.setProperty("webdriver.firefox.marionette", "C:/Users/serajendran/Downloads/geckodriver-0.10.0 (1)"); 
     DesiredCapabilities capabilities = DesiredCapabilities.firefox(); 
     capabilities.setCapability("marionette", true); 

     driver = new FirefoxDriver(capabilities); 

     driver.get("http://newtours.demoaut.com/"); 
     driver.manage().window().maximize(); 
     System.out.println(driver.getTitle()); 

     Assert.assertEquals("Welcome: Mercury Tours", driver.getTitle()); 
    } 

    @Test 
    public final void login() { 

     driver.findElement(By.name("userName")).sendKeys("invalidUN"); 
     driver.findElement(By.name("password")).sendKeys("invalidPW"); 
     driver.findElement(By.name("login")).click(); 
     System.out.println("login in progress"); 
    } 

    @Test 
    public final void flightFinder() { 

     WebDriverWait wait = new WebDriverWait(driver, 30); 
     WebElement oneWayRadioButton = wait.until(ExpectedConditions.elementToBeClickable(By.linkText("oneway"))); 
     oneWayRadioButton.click(); 
     System.out.println("Clicked One Way"); 
    } 

} 

ご協力いただければ幸いです。

+0

このウェブサイトでは「あなたのため、承認が必要ですd。あなたの質問にターゲットラジオボタンの 'HTML'を追加してください。またiframe内にあるかどうかを確認し、iframeに 'HTML'を指定してください。 – Andersson

+0

linktextにはいくつかのパディングや何かがあり、完全に一致していないかもしれません。 – Granitosaurus

+0

入力してくれてありがとう: – Ashley

答えて

0

実際に問題がの実行TestNGでは、あなたのテスト方法で

です0メソッドは、デフォルトでアルファベット順です。あなたのコードでlogin()の前にflightFinder()メソッドが実行されているので、ラジオボタンをクリックするために正しいロケータを使用していても、例外が表示されます。

ソリューション:

  1. アルファベット順にする方法について@Test注釈下

  2. 使用の優先順位を自分のメソッド名を維持し、例えば - @Test(priority = 1)

  3. 依存性テストの作成。 -

    @Test() 
    public final void login() 
    { 
        //code 
    } 
    
    @Test(dependsOnMethods={"login"}) 
    public final void flightFinder() 
    { 
        //code 
    } 
    

あなたのコードは以下のように更新してみてください - 解決後

@Test 
public final void doLogin() { 

    driver.findElement(By.name("userName")).sendKeys("invalidUN"); 
    driver.findElement(By.name("password")).sendKeys("invalidPW"); 
    driver.findElement(By.name("login")).click(); 
    System.out.println("login in progress"); 
} 

@Test() 
public final void flightFinder() { 

    driver.findElement(By.xpath("//input[@type='radio' and @value='oneway']")).click(); 
    System.out.println("Clicked One Way"); 
} 
+0

私のためにうまくいきました..ありがとうございました:) – Ashley

+0

@Ashley、テストは他のテストとは独立しているはずです。 Narendraが示唆したように、テストのアルファベット順の実行はデフォルト設定に過ぎず、変更することができます。 – becixb

1

//*[@type='radio']//*[@value='oneway'] - あなたはradioとvalue oneway型の要素を探しています。このxpathは、値のある子要素を持つradio型の要素を探します。

//*[contains(@type,'radio')] - あなたがのために複数の結果が得られます。この

//*[contains(text(),'oneway'] - これがあれば動作するはずです - 、テキストは「ワン・ウェイ」

//input[@type='radio' AND @value='oneway']を含むテキストだけでvalue属性が一方向である、一方向れていませんあなたは変更「AND」と「と」

+0

このxpathを試しました "// input [@ type = 'radio'と@ value = 'oneway']" ..しかし動作しません。私はそのような要素の例外はありません。 – Ashley

1

がnewtourサイト上で私のために働いた -

driver.findElement(By.cssSelector("input[value='oneway']")).click(); 
関連する問題