2016-06-21 24 views
0

私はdisabled="disabled"属性を使用して、チェックボックスをつかむしようとしている:ALLでチェックボックスを見つけるセレンを作る無効= "無効"

(.//*[contains(@class,'wfm-statusbar')])[1]/descendant::input 

(.//*[contains(@class,'wfm-statusbar')])[1]/descendant::*[@type='checkbox'] 

(.//*[contains(@class,'wfm-statusbar')])[1]/descendant::*[@disabled='disabled'] 

: "XPathは" の一つである

List<WebElement> checkBox= driver.findElements(By.xpath("xpath")); 

ファイアウォールとコンソールでチェックされている場合は、上記のです。証拠例:私は、コード内でXPathを実行すると

enter image description hereしかし

、それは失敗します。

org.openqa.selenium.TimeoutException: Timed out after 15 seconds waiting for ... 

私はdisabled属性なしと同じに(「通常」のチェックボックスを検索する場合ページ)、コードが動作します。だから私はそれが責任を負うこのdisabled="disabled"属性であると確信しています。

簡体HTML:

<div class="wfm-statusbar"> 
    <div> 
    <span> some text</span> 
    <span> 
    <label> 
      <input type="checkbox" disabled="disabled" > 
    </label> 
</span> 
    </div> 
</div> 

任意の提案ですか?おかげさまで

+0

「失敗する」と説明してください。 – SiKing

+0

が編集されました(例外が追加されました) – Andrejs

+0

あなたはもっと長い時間待っていますか? – SiKing

答えて

1

CSSセレクタを試すことができますが、XPathがそうでない場合は動作するとは思われません。 SiKing氏によると、Seleniumは無効または不可視要素と対話しません。

System.out.println(driver.findElements(By.cssSelector("div.wfm-statusbar input[disabled='disabled']")).isEmpty()); 

これは、要素が見つからない場合、trueを返します。

JSを使用してこれらの要素にアクセスする必要があります。ここに関連する質問はHow to use JavaScript with Selenium WebDriver Javaです。

以下のように、同じCSSセレクタを使用したいが、JSを使用したいと思うでしょう。

document.querySelectorAll("div.wfm-statusbar input[disabled='disabled']"); 

これは、あなたができることのできる要素の集合を返します。


は、ここでは、JavascriptExecutorに使用するだろうものに類似した何かの簡単な例です。

WebDriver driver = new FirefoxDriver(); 
driver.get("https://www.google.com"); 
JavascriptExecutor jse = (JavascriptExecutor) driver; 
List<WebElement> linksJs = (List<WebElement>) jse.executeScript("return document.querySelectorAll('a')"); 
System.out.println(linksJs.size()); 
+0

+1。 JavaScriptの提案をありがとう。 'java.lang.ClassCastException:[bla bla] ...をorg.openqa.selenium.JavascriptExecutor'にキャストできないため、JSスクリプトを実行できません。私はこの問題を解決しましたが、成功しませんでした。私がそれを働かせるなら、私はこの答えに戻るでしょう。 – Andrejs

+0

私はJSEの簡単な例と、この場合にどのように使用するのかを追加しました。 – JeffC

0

チェックボックスにチェックが入っていて無効になっている場合にのみチェックボックスが表示されます。

(.//*[contains(@class,'wfm-statusbar')])[1]/descendant::*[@type='checkbox' and @disabled='disabled'] 
+0

これが動作する理由はありません単純に2つの非選択セレクタを1つにまとめます。 p.s.私はとにかくそれを試して、それは動作しません。 – Andrejs

+0

あなたは両方のセレクタが火道で別々にチェックしたときに両方のセレクタが機能すると言いました。 'WebDriverWait wait = new WebDriverWait(driver、10);を使って試してみて、次に' WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.XPATH(あなたがテストしているxpath)))))) 'を実行し、ifそれは目に見えます。 –

関連する問題