2017-02-14 21 views
2

Selenium WebDriverテストを初めて使用しています。私はそれを職場で使用しようとしています。私はセレクタ、xpathsなどの多くの組み合わせを試みたが、私はそれを通過することはできません。私は悲しいことに期待された結果がない、stackoverflowに関する多くの似たようなトピックも探しました。私が必要とするのは、 "NO SERVICE"ボタン(a href)をクリックできることです。私が試してみると、この要素は見えないというエラーが続いています。 "wait"を使用してこのエラーを処理しようとすると、別のエラー "Expected condition failed:要素の可視性を待っています..."が続きます。私は間違って何をしていますか?Selenium WebDriver Java - 要素が表示されません。

マイコード:

WebDriverWait waitWait = new WebDriverWait(driver, 40);  
    waitWait.until(ExpectedConditions.visibilityOfElementLocated(By.className("withoutService")));  
    WebElement x = driver.findElement(By.className("withoutService")); 
    x.click(); 

ともWebページからHTMLコードスニペット:

<div id="fancybox-outer"> 
    <div id="fancybox-content"> 
     <div style="width:auto;position:relative;"> 
      <div id="serviceReminder" style="width: 765px"> 
       <form id="serviceReminderFrom" method="post"> 
        <div class="homeMessage"> 
         <div class="innerMessage"> 
          <input type="hidden" id="serviceToAddReminderFromAction" name="F_ACTION" value=""> 
          <input type="hidden" id="itemsWithServices" name="itemsWithServices" value=""> 
          <input type="hidden" name="eventTypeName" value="Something"> 
           <div class="ServicesDelivery"><span class="disable-button"></span> 
            <a href="javaScript:void(0);" rel="3" class="withoutService btn btn-fourth" onclick="registerButtonClickOnPopup('NO SERVICE'); setTimeout(function(){registerButtonClickOnPopup('NO SERVICE');},400);">NO SERVICE</a> 
            <a href="javascript:void(0)" rel="1" class="next js-tooltip btn btn-second" onclick="registerButtonClickOnPopup('ADD SERVICE'); setTimeout(function(){registerButtonClickOnPopup('ADD SERVICE');},400);">ADD SERVICE</a> 
          <div class="none"> 
          </div> 
          <div class="clear"></div> 
         </div> 
        </div> 
       </div> 
      </form> 
     </div></div></div><a id="fancybox-close" style="display: inline;"></a><div id="fancybox-title" class="" style="display: none;"> 
     </div><a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a><a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a></div> 
+0

あなたが探している要素は、「隠された」入力に含まれています。入力を非表示にしないようにテスト内で何かしていますか? – Josh

+0

@Josh、いいえ、それは隠された 'input'の一部ではありません。 AFAIK、 'input'要素は属性だけを含むことができますが、他のノードは含みません。 – Andersson

答えて

0

あなたのロケータBy.className("withoutService")は、いくつかの要素を一致させることができます。より具体的なセレクターが必要です。コードの下に試してみてください。

WebDriverWait waitWait = new WebDriverWait(driver, 40);  
WebElement x = waitWait.until(ExpectedConditions.elementToBeClickable(By.linkText("NO SERVICE")));  
x.click(); 
+0

彼が受け取ったエラーは、基準を満たす複数の要素で問題があることを示しているとは思わない – Josh

+0

申し訳ありませんが、私はあなたの答えを誤って編集しました。あなたが望むならそれを拒否することができます –

+1

@Naveen、それは大丈夫です:)しかし、iframeの中にある要素の場合、NoSuchElementExceptionは返されますが、ElementNotVisibleExceptionは返されないことに注意してください。 – Andersson

0

次のXPathを試してみてください:

//a[contains(@class, 'withoutService')] 

完全なコード:

WebDriverWait waitWait = new WebDriverWait(driver, 40);  
WebElement x = waitWait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[contains(@class, 'withoutService')]")));  
x.click(); 

上記のコードが動作しない場合は、その要素がiframeの内側にあるかもしれません。私の詳細な回答hereをご覧ください。

+1

実際には、 'withoutService'は' By.className() 'の検索で使用できる完全なクラス名です。私は、あなたが*完全な*と*化合物*クラス名を混同すると思う。 – Andersson

+0

ええ、私の悪い。指摘してくれてありがとう。 –

関連する問題