1

Firefoxをバージョン19にアップグレードした後、最近Selenium Webdriverテストが失敗しました。いくつかのテストでは、ページにはあるがブラウザウィンドウには表示されない要素を取得する必要があります。つまり、右にスクロールして表示する必要があります。Firefox 19にアップグレードしてから(15からアップグレードしたので、16から問題になる可能性があります)、ブラウザウィンドウに表示される要素のテキストしか取得できません。私のxpathは、たとえば次のコードで、すべての要素を適切に取得します。

    private void buildColumnsMap(){
    allColumnHeaders = new HashMap<String,Integer>();
    positionToColumnName = new ArrayList<String>();

    WebElement columnsRoot = driver.findElement(By.xpath(COLUMNS_ROOT_XPATH));
    List <WebElement> columns = columnsRoot.findElements(By.xpath("./td/div/span"));
    System.out.println("Number of columns found: " + columns.size());

    for(int i = 0; i < columns.size(); ++i){
        String columnName = columns.get(i).getText();
        System.out.println("Column been inserted: " + columnName);
        allColumnHeaders.put(columnName, i);
        positionToColumnName.add(columnName);
    }
}

リスト「列」のサイズは38ですが、ブラウザウィンドウでは、スクロールせずに10列しか表示されないため、列名をオブジェクトに配置すると、10列名が表示され、その後すべて空白になります。

Number of columns found: 38
Column been inserted: Date/Time
Column been inserted: Endpoint1
Column been inserted: Endpoint2
Column been inserted: Duration
Column been inserted: Codec1
Column been inserted: Codec2
Column been inserted: Avg MOS1
Column been inserted: Avg MOS2
Column been inserted: Avg Latency1 (ms)
Column been inserted: Avg Latency2 (ms)
Column been inserted: Avg Jitter1 (ms)
Column been inserted: 
Column been inserted: 
...
...

これはFirefox15で完全にうまく機能しましたが、現在は壊れています。誰かが似たようなものに遭遇し、回避策を見つけましたか?または、スクロールを強制して画面に表示するように「要素までスクロール」する方法はありますか?

4

2 に答える 2

9

WebDriverやFirefoxがなぜそのように動作するのかについての答えを見つけることができませんでした。私のAUTには、レポートを表示するグリッドと、Htmlで表示できる画面に表示されていないセル/ WebElementsがあります。これらは非表示になっていないように見え、WebDriverはそれらを表示できることを認めます。 getText、getAttributeなどの要素の値を取得できません。したがって、この制限を回避するために(バグなのか、それとも動作方法だけなのかわからない)、次のJavaScriptを使用しました。私にとっての問題:

private void scrollToElement(WebElement element){

((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
}

これは間違いなく、Firefoxの動作がv16+から変更されたものです。うまくいけば、他の誰かもこれが役立つと思うでしょう。

于 2013-03-15T15:41:53.090 に答える
0

以下のようなネイティブイベントを無効にして、同じことを試してください

FirefoxProfile profile=new FirefoxProfile();
profile.setEnableNativeEvents(false);
DesiredCapabilities dc = DesiredCapabilities.firefox(); 
dc.setCapability(FirefoxDriver.PROFILE, profile); 
driver = new FirefoxDriver(dc);

これは、PageDownを実行するためのいくつかの回避策です。

driver.findElement(By.tagName("body")).sendKeys(Keys.PAGE_DOWN);

selenium-server-standalone-2.31.0にアップグレードしましたか?

于 2013-03-14T04:50:58.823 に答える