我是Selenium的新手,也是Java的新手。我是一个交易测试人员,而不是开发人员,所以我试图逐渐将我的Selenium IDE脚本转换为更健壮,更合适的东西。不幸的是,我正在努力完成一项相当基本的任务。加载网页后,我想点击一个按钮。这在Selenium IDE中运行良好,但前提是我将速度设置为“慢”#。
我可以使用以下代码使其工作,但仅限于我包含thread.sleep行。我已经读到这不是一个好主意,所以我尝试使用webDriverWait实现更聪明的东西。
public class mytestclass {
private WebDriver driver;
private String baseUrl;
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "";
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
}
@Test
public void test1() throws Exception {
driver.get(baseUrl + "file:///C:/_VM/testpage.html");
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("button_X")));
//Thread.sleep(2000);
driver.findElement(By.id("button_X")).click();
}
}
因此,当执行thread.sleep行时这是有效的,这使我相信当按钮实际上没有准备好时,wait.until行返回true。我还试图将ExpectedConditions切换到其他标识符,例如visibilityOfElementLocated(By locator)和presenceOfElementLocated(By locator),但这些也是同样的行为。
我在这里做错了吗?还有什么我可以尝试的吗?
我担心我无法链接到网站,因为它与工作有关。它确实读了很多图像,并在启动时运行了很多javascript,所以它需要花一点时间才能开始,但这就是我想要添加等待逻辑的原因!
感谢您的任何建议。
答案 0 :(得分:1)
您网站的创业是否涉及jQuery?如果有,你可以试试这个。我发现它在我的测试中很有帮助。它在C#中,但我相信你可以把它转换成java。
等到jQuery准备好了:
IWait<IWebDriver> wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(WAITFORELEMENT_TIMEOUT));
wait.Until(d => (bool)(d as IJavaScriptExecutor).ExecuteScript("return jQuery.active == 0"));