1

我正在将 Selenium RC 与 Junit 一起使用。

运行以下简单脚本后,我收到超时错误。

com.thoughtworks.selenium.SeleniumException:30000 毫秒后超时

我已经记录了使用 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 RC 独立 jar 更新到最新:http ://docs.seleniumhq.org/download/即 2.31.0

放置一些下一个元素以等待您在加载 URL 后使用waitForElementToPresent而不是waitForPageToLoad

用于windowMaximize更好的视野。

如果您的完整会话超时,请使用setTimeOut

于 2013-03-28T06:30:31.257 回答
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

您可以尝试以下方法 -> 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

in which line do you get the timeout error? usually it's when selenium can not recognize an element from the DOM, check your xpaths if they return anything. I would recommend you to use xpath finder: https://addons.mozilla.org/en-us/firefox/addon/xpath-finder/

于 2013-03-02T20:39:26.447 回答
0

尝试使用 Selenium Remote Control 1.0.2 你可以在这里阅读Selenium Remote Control 1.0.2并在那里下载 jar:

于 2013-03-03T14:20:22.150 回答