いくつかのレコードを表示するグリッドがあります。レコードをクリックしてその要素を検査すると、非表示であるがグリッドに表示されていることが示されます。
私のHTMLは:
<a href="http://192.168.1.6/eprint_prod_3.8/settings/othercost_add.aspx?type=edit&id=805" title="Plastic Spiral Bind"
<div style="float: left; width: 99%; overflow: hidden; height: 15px; overflow: hidden"> Plastic Spiral Bind </div>
</a>
上記のコードは検査中は非表示ですが、グリッドに表示されます。
セレンコード:
driver.findElement(By.partialLinkText("Plastic Spiral Bind")).click();
最初にその要素をオブジェクトに保存し、element
と言ってから、次のコードを記述してその非表示の要素をクリックします。
JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("arguments[0].click();", element);
2つのアプローチがあります。 Seleniumは、非表示の要素との相互作用を許可しないように特別に記述されています。合理的な理由は、人がそのアクションを実行できない場合、どちらもセレニウムであってはならないということです。したがって、Seleniumを介してクリックを実行するには、ユーザーがそのボタンを表示するために行うアクション(マウスオーバーイベント、別の要素のクリックなど)を実行し、表示されたらクリックを実行する必要があります。
ただし、Seleniumでは要素のコンテキスト内でJavascriptを実行できます。そのため、JavaScriptを記述して、非表示であってもクリックイベントを実行できます。
私の好みは、ボタンを表示するためのアクションを常に試行して実行することです
私はjQueryでそれをやった:
page.execute_script %Q{ $('#some_id').prop('checked', true) }
overflow:hidden
要素がDOMに非表示または存在しないことを常に意味するわけではなく、要素に収まらないオーバーフロー文字がトリミングされていることを意味します。基本的には、スクロールバーを表示する必要がある場合でも表示しないことを意味しますので、あなたの場合はテキスト付きのリンク
プラスチックスパイラルバインド
「Plastic Spir ...」などとして表示される可能性があります。したがって、このlinkTextが実際に存在しない可能性があります。
だからあなたはおそらく試すことができます:
driver.findElement(By.partialLinkText("Plastic ")).click();
またはxpath:
//a[contains(@title, \"Plastic Spiral Bind\")]
<div>
はIDまたは名前を持っているので、find_element_by_id
またはfind_element_by_name
クラス名、CSS、XPathを試すこともできます
find_element_by_class_name
find_element_by_css_selector
find_element_by_xpath