2016-12-12 5 views
0

電子メール、パスワード、および署名要素をhereから選択しようとしています。Selenium Java findElement一意のIDまたはXpathにクエリが無効です

要素に固有のIDがあり、Xpathを検査してコピーできます。

私はこれらのクエリを試して、セレニウムがそれを見つけることができない理由を理解できません。

WebElement emailfield = driver.findElement(By.id("lid")) 

    WebElement emailfield = driver.findElement(By.xpath("//*[@id=\'lid\']")); 

    WebElement emailfield = driver.findElement(By.xpath("//*[@id=lid]")); 

ドライブは、これを行うためにクロムを開いて起動することができます。しかし、私は幸運ではない。 これらが有効でない方法を教えてください。私が理解しているように、idは完全にユニークであるべきですが、By.idとBy.xpathのどちらのメソッドも要素を見つけられません。

ここに私のコードです。

String email = "myemail"; 
    String password = "the_password"; 
    WebElement emailfield = driver.findElement(By.id("lid")); 
    emailfield.sendKeys(email); 
    WebElement passwordfield = driver.findElement(By.xpath("//*[@id=pwd]")); 
    passwordfield.sendKeys(password); 

    WebElement login = driver.findElement(By.id("submit_but")); 
    login.click(); 

ここにHTMLテーブルがあります。

<table width="260" align="center" class="mob_width" cellspacing="2" cellpadding="1"> 

        <tbody><tr> 
         <td colspan="2"> 
         <h3 class="signintxt">Sign In</h3> 
         </td> 
        </tr> 

        <tr> 
        <td align="center" colspan="2"><span id="msgpanel"></span></td> 
        </tr> 
        <tr> 
         <td class="label">Email/Phone:</td> 
         <td align="left"><input name="lid" class="input usrbx" id="lid" onkeypress="clearmsg()" type="email" value=""></td> 
        </tr> 
        <tr> 
        <td class="label">Password:</td> 
        <td align="left"><input name="pwd" class="input passbx" id="pwd" onkeypress="clearmsg()" type="password"></td> 
        </tr> 

        <tr> 
        <td class="label"></td> 
        <td align="left"><div class="forgotpasslink"><span onclick="goToForgotPassword();">Forgot Password?</span></div> 
        </td></tr> 

        <tr id="hiptr" style="display: none;"> 
              <td class="label">&nbsp;</td><td align="left">&nbsp;</td> 
        </tr> 
        <tr> 
        <td class="emptytd"></td> 
        <td height="30" class="mobile-height"> 


        <div class="sectxt"> 
         <label> 
          <input name="rem" id="rem" type="checkbox" value="10"> 
          <span class="securetxt">Keep me signed in</span> 
         </label> 
        </div> 


        </td> 
        </tr> 
        <tr> 
        <td class="emptytd"></td> 
        <td align="left"> 
         <button name="submit" class="submit_mobile" id="submit_but" type="submit">Sign In</button> 


        </td> 
        </tr> 

       </tbody></table> 

コンパイルして10秒待って同じエラーが発生する明示的な待機時間を示します。

//explicit 
    WebDriverWait wait = new WebDriverWait(driver, 10); 
    WebElement aboutMe; 
    aboutMe= wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(".//form[@id='login']//*[@id='lid']"))); 
    aboutMe.click(); 
+0

この要素が存在するHTMLソース部分を投稿してください。私はそれがJavaのソースコードから見つけることができない理由はありません。 –

+0

投稿を確認し、ページにテーブルを追加しました。 –

+0

エラーが生じますか? – Grasshopper

答えて

1

フィールドを参照してくださいの内側にあります。あなたはhereを見て、それを複数のスイッチオプションについて最初

driver.switchTo.frame("zohoiam"); // switch by iframe ID 

WebElement emailfield = driver.findElement(By.id("lid")); 
// some more code 

driver.switchTo().defaultContent(); // switch out of the iframe 

を切り替える必要があります。

+0

ねえ!これはここで働いた。私はこれをキャッチせず、これが問題であることも認識していませんでした。どのように伝えることができますか? –

+1

@ JakeGoss-Kuehnフィールドを右クリックし、メニューから "Inspect"を選択すると、htmlツリーが要素とともに開きます。そこからhtmlツリーを上に移動し、 '