2016-09-30 10 views
2

MicrosoftEdgeでセレンテストを実行しているときに要素が表示されるのを待つ関数に問題があります。特に、要素が別の要素の上にあるとき。誰もこの問題を解決する方法を知っていますか?私は、ユーザーが要素を見て、それをクリックできることを確認するために使用できるjavascript関数はありますか?セレンのwaitForElementVisibleがMicrosoftEdgeで動作しない

は、ここで私は問題を抱えているん今

function waitForElementDisplay (selector, time) { 
      if (document.querySelector(selector) != null) { 
       return true; 
      } 
      else if (timeLimit < timeSince) { 
       return false; 
      } 
      else { 
       timeSince += time; 
       setTimeout(function() { 
        waitForElementDisplay(selector, time, timeLimit, timeSince); 
       }, time); 
      } 
     } 

答えて

0

はい、セレン、いくつかの時間のために使用してんですよ。 Edgeと一緒に働いたことはありませんでしたが、他のブラウザと同様の問題がありました。

通常は、リトライラッパーを作成し、スクリプト実行プログラム内で "document.getElementById"(または何か)を使用して、スクリプト実行プログラム内の要素参照を取得します。私はX秒遅れで数回試します。

次の例は、DOMでいくつかの要素にアクセスできるようになるのを私がどのように待っているかを示しています。

@When("^questionnaire response is loaded$") 
public void questionnaire_response_is_loaded() throws Throwable { 

    Predicate<WebDriver> isLoaded = new Predicate<WebDriver>() { 
     @Override 
     public boolean apply(WebDriver webDriver) { 
      Object obj = ((JavascriptExecutor) webDriver).executeScript(
        "return (!document.getElementById('idNotification'))" 
      ); 
      // if element is present the result will turn false, so we have to negate it 
      return !((Boolean) obj); 
     } 
    }; 

    WebDriverWait wait = new WebDriverWait(BrowserDriver.getCurrentDriver(), 10); 
    wait.until(isLoaded); 
} 
+0

codEがありますか? – Jasmine

+0

私のプロジェクトで使用するサンプルコードが追加されました –

0

方法(私はcucumberJVMを使用しています)waitForElementVisible唯一の要素が0に優れたサイズと不透明度でレンダリングされていることを確認それは要素が、人間の目によって可視であるか否かをチェックしません。

要素が見えるとクリッカブルであるかどうかをチェックするために、このJavaScript関数を使用することができますの要素がビューにスクロールしない場合にはfalseを返すこと

function isClickable(element) { 
    var doc = element.ownerDocument || document, 
    win = doc.defaultView || window, 
    rect = element.getBoundingClientRect(), 
    elemAt = doc.elementFromPoint(rect.left + (rect.width >> 1), rect.top + (rect.height >> 1)); 

    for (var e = elemAt; e; e = e.parentElement) { 
    if (e === element) return !elemAt.disabled && win.getComputedStyle(elemAt, null).getPropertyValue('pointer-events') !== 'none'; 
    } 
    return false; 
} 

注意を。したがって、最初にelement.scrollIntoView()に電話する必要があるかもしれません。

関連する問題