1

JunitでSelenium RCを使用しています。

次の簡単なスクリプトを実行すると、タイムアウト エラーが発生します。

com.thoughtworks.selenium.SeleniumException: 30000ms 後にタイムアウトしました

IDE を使用して正常に動作する IDE スクリプトを記録しました。Junit 形式を使用してフォーマットされた同じコードを Eclipse と Junit で実行しようとすると、上記のタイムアウト エラーが発生します。

package script;

import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;

public class ComparePrice extends SeleneseTestCase {
    public void setUp() throws Exception {
        setUp("http://www.landmarkonthenet.com/", "*firefox");
    }
    public void testComparePrice() throws Exception {
        selenium.open("http://www.landmarkonthenet.com/");
        selenium.click("link=Books");
        selenium.waitForPageToLoad("60000");
        selenium.type("id=TopSearch", "junit");
        selenium.click("css=button[type=\"submit\"]");
        selenium.waitForPageToLoad("60000");
        selenium.click("xpath=(//a[contains(text(),'Desc')])[2]");
        selenium.waitForPageToLoad("60000");
        String P1 = selenium.getText("xpath=/html/body[@id='department']/div[@id='page-body']/div[@id='main-content']/div[@id='page-content']/div[3]/div[1]/article/div[2]/p/span[1]");
        System.out.println(P1);
        String P2 = selenium.getText("xpath=/html/body[@id='department']/div[@id='page-body']/div[@id='main-content']/div[@id='page-content']/div[3]/div[2]/article/div[2]/p/span[2]");
        System.out.println(P2);
        String T3 = selenium.getEval("var A = Number(\"" + P1 + "\".substr(3).replace(/,/g,'')); var B= Number(\"" + P2 + "\".substr(3).replace(/,/g,'')); var c = false; if(A>=B) C=true; C");
        System.out.println(T3);
    }
}
4

5 に答える 5

0

Selenium Remote Control 1.0.2を使用してみてください。ここで、Selenium Remote Control 1.0.2を読んで、そこからjarファイルをダウンロードできます。

于 2013-03-03T14:20:22.150 に答える
0

どの行でタイムアウトエラーが発生しますか?通常、セレンがDOMから要素を認識できない場合は、xpathが何かを返すかどうかを確認します。xpath finderを使用することをお勧めします: https ://addons.mozilla.org/en-us/firefox/addon/xpath-finder/

于 2013-03-02T20:39:26.447 に答える
0

以下のアプローチを試すことができます-> 1.アプリケーションをナビゲートしようとしているときはいつでも。アプリケーション内のいくつかの静的要素を見つけ出し、For ループとループ内を使用して動的な待機制御を適用し、その要素が存在するかどうかを確認します。

for (int second = 0;; second++) {
        if (second >= 160) fail("timeout");
        try { if (selenium.isTextPresent(" Web Element on the page")) break; } catch (Exception e) {}
        Thread.sleep(1000);
    }
于 2013-12-23T09:21:15.990 に答える
0

selenium.waitForPageToLoad("60000"); を使用する代わりに

クリックするたびに次を使用してみてください

for (int second = 0;; second++) {
            if (second >= 60) Assert.fail("timeout");
            try { if (selenium.isVisible("next element")) break; } catch (Exception e) {}
            Thread.sleep(1000);
        }

次に、タイムアウトエラーが発生した場所を正確に見つけることができます。

public void testComparePrice() throws Exception {

selenium.open("http://www.landmarkonthenet.com/");

selenium.click("link=Books");

for (int second = 0;; second++) {
    if (second >= 60) Assert.fail("timeout");
    try { if (selenium.isVisible("id=TopSearch")) break; } catch (Exception e) {}
    Thread.sleep(1000);
        }

selenium.type("id=TopSearch", "junit");
selenium.click("css=button[type=\"submit\"]");

等々

于 2013-05-24T16:13:59.720 に答える
0

Selenium RC スタンドアロン jar を最新のものに更新します: http://docs.seleniumhq.org/download/ ie 2.31.0

URL がロードされると期待される待機用の次の要素を配置します。waitForElementToPresent代わりにwaitForPageToLoad

見やすくするために使用windowMaximizeします。

完全なセッションがタイムアウトになっている場合は、使用しますsetTimeOut

于 2013-03-28T06:30:31.257 に答える