web-dev-qa-db-ja.com

WebDriver-要素はクリックできませんChrome

以下の問題があります。 FirefoxとChromeでテストを実行します。 Firefoxではテストは正しく実行されますが、Chrome SauceLabsでは次のメッセージが表示されます:

unknown error: Element is not clickable at point (717, 657). Other
element would receive the click: <div class="col-md-9 col-sm-12"
style="margin-top:8px;">...</div> (Session info: chrome=36.0.1985.125)
(Driver info: chromedriver=2.10.267521,platform=Windows NT 6.3 x86_64)

私は同じ方法で両方のテストで一意のCSSセレクターによって要素を選択します:

driver.FindElement(By.CssSelector("button.btn-xs:nth-child(1)")).Click();

ここで何が悪いのか考えはありますか?

11
Sowiarz

必要な要素が正しい、つまりXPathが正しいと想定しています。いくつかの方法があります:

  1. 代わりに_parent element_をクリックしてみてください。
  2. Submit()の代わりに..Click()を試してください
  3. クリックしようとしている要素のJavaScriptイベントで実行されるOnClickを実行してみてください。

私はいつも成功して3番目の方法を使用しました。

もう一つ

  1. その要素(またはスペースキー)に対して.SendKeys(Keys.Enter)を実行します
16
bit

質問にGoogle-Chromeのタグを付けたので、これは主にChromeDriverで発生していると思います-)。以前のプロジェクトの1つ(Asp .Net MVC)でも同じ問題が発生しました。一部の要素がscreen_visible_areaにない場合、このドライバーでは非表示であることがわかりました。それらが正しくロードされている(HTML、CSS3、JSなど)ことに注意してください。

したがって、多くの読み取りとテストを行った後、私の回避策単にであることがわかりました。スクロールしてWebElementに移動すると、画面の表示部分に表示されます。実際、この問題はすべての要素に当てはまるわけではなく、より良い解決策は見つかりませんでした。

_unknown error: Element is not clickable at point (..., ...) 
_

あなたのように私もそれがセレクター関連だと思ったので、この場合の説明的なエラーではありません。

正解ですが、IEDriverでも同じ問題が発生しました。私の実装は、ブラウザのスクロールダウン/アップオプションを使用して、問題のある要素がある場所に「画面を送信」することでした。

使用できる単純なJSExecutorコード:

_WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(110,350)", "");
_

または

_jse.executeScript("scroll(0, 250);");
_

または

_driver.executeScript("window.scrollBy(110,350)", "");
_

その他のトピック関連 役立つリソースはこちら

更新

.sendKeys()に関しては、 ブラウザのアクセシビリティ機能 も使用しました。あなたがする必要があるのは、ターゲットのweb_elementに到達するために、テストに必要なクリック数[〜#〜] tab [〜#〜]を数えることだけです。次に、.click()を呼び出すだけです。

この単純なコードを試してください:

_element.sendKeys(Keys.TAB);
_

または

_element.sendKeys("\t")
_

または

_Actions builder = new Actions(driver);
builder.keyDown(Keys.TAB).perform()
_
7
ekostadinov

chrome xpathが正しかったのにログインボタンがクリックできないという問題が発生していました。多くのサイトを閲覧した後、解決策にたどり着きました-代わりに。submit()を使用してください.click()の、そしてそれは完全に機能しました。

driver.findElement(By.xpath("//button[@id='loginBtn']")).click();
driver.findElement(By.xpath("//button[@id='loginBtn']")).submit();
1
mgupta

これは非常に古い質問だと思いますが、今日ではほぼ同じ問題を探しているときに出てきました。ここで説明する修正の多くを試し、問題の新しい例外(主に古い要素とhttpリクエストのタイムアウト)を取得した後、SeleniumのGitHubで この問題 に遭遇しました。

投稿で説明されているように、Chromeは私のバージョンのchromedriver.exeの機能を超えて進歩しました-私のv2.30ドライバーは、Chrome v61スクロールメカニズム 最新のchromedriver.exeに更新 すべての問題を解決しました。

tl/dr:お使いのバージョンのchromedriverがテスト中のChromeのバージョンと互換性があることを確認してください。

1
jdmac020

私はFFでこの問題を抱えています。この問題は、フィールドがビュー領域にない場合に発生します。この問題を解決するための巧妙な方法は、ブラウザをズームアウトすることです。

TheNotClickableField.SendKeys(Keys.Control + "-" + "-");

ページサイズに応じて、多少ズームアウトすることをお勧めします。

0
Zaher

私にとっては、代わりにこのコマンドを作成していました。

driver.FindElementByXPath("id('gender1')").SendKeys(Keys.Space);

私の場合、私はラジコンと対話していました。

0
jbooker

CSSで複雑なことをしている場合、Chromeは混乱する可能性があり(これは私に起こりました)、クリックしようとしている要素は別の要素で覆われていると思います。そうではありません。

これを解決する1つの方法は、Chrome zインデックスを追加して(相対位置または絶対位置も追加する必要があります)、正しい要素を明確に上に配置することで、状況を正しく理解できるようにすることです。その他。

0