【发布时间】:2013-08-31 19:23:35
【问题描述】:
所以我使用 Selenium IDE 为我想要完成的一些自动化创建了一个测试用例。我希望能够为这种情况创建一些循环/流控制,所以我想我需要将它从 Selenium IDE 导出到 Java 之类的东西(我最熟悉 Java)。我导出到 Java/JUnit4/Web 驱动程序。我认为尝试通过 Eclipse 执行 java 文件效果最好,但如果有人知道更简单的事情,请告诉我。无论如何,我没有找到关于如何通过 Eclipse 执行这个 Java 的很好的解释。
我阅读的大部分内容都告诉我要确保我的构建路径库包含 Selenium 独立服务器。几乎所有我读到的东西都告诉我要使用 Selenium 遥控器。但是,我认为 RC 已经贬值了,我想知道是否有任何方法可以使它与我从 Selenium 下载的更新的 Web 驱动程序一起工作。此外,我读到的大部分内容都告诉我需要使用 public static void main(),这有点尴尬,因为我不知道如何更改导出的 selenium 给我的代码(显然我不能全部粘贴到main方法中)。
如果有人能指导我完成从 Selenium 到 Java 的导出到执行代码,我将永远欠你的债。
Selenium 给我的代码: 包 com.example.tests;
package com.rackspace;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.NoAlertPresentException;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class RackspaceContactAutomation {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver = new FirefoxDriver();
baseUrl = "https://cp.rackspace.com/Exchange/Mail/Contacts/List.aspx?selectedDomain=blahblahblah.com";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testContactAutomationJava() throws Exception {
driver.get(baseUrl + "/Exchange/Mail/Contacts/List.aspx?selectedDomain=blahblahblah.com");
driver.findElement(By.linkText("Mr. Man")).click();
driver.findElement(By.linkText("Contact Information")).click();
new Select(driver.findElement(By.id("PhoneNumberType"))).selectByVisibleText("Mobile");
driver.findElement(By.id("MobilePhone")).sendKeys("999-999-9999");
new Select(driver.findElement(By.id("PhoneNumberType"))).selectByVisibleText("Fax");
driver.findElement(By.id("Fax")).sendKeys("999-999-9999");
driver.findElement(By.cssSelector("button.primary")).click();
}
@After
public void tearDown() throws Exception {
driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
private boolean isAlertPresent() {
try {
driver.switchTo().alert();
return true;
} catch (NoAlertPresentException e) {
return false;
}
}
private String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
String alertText = alert.getText();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alertText;
} finally {
acceptNextAlert = true;
}
}
}
这给了我 4 个错误(3 个用于注释,我可以删除,还有一个用于 tearDown() 方法中的 fail。这不是我非常关心的错误,我该怎么做代码实际执行了吗?
谢谢!
【问题讨论】:
-
正在为您解答——您能否展示从 Selenium IDE 导出的 Java 代码?这不是完全必要的,但它可能会帮助我让你的答案更清楚。
-
这是一个完整的 Java 代码文件。我不太确定我是否理解它的复杂之处?将 JUnit 下载并安装到您的项目中,它会处理它.... 像这样的文档:code.google.com/p/selenium/wiki/GettingStarted ...只需使用
main方法来避免添加额外的测试框架的“位”。就是这样。 -
我昨天刚刚为像你这样的人推出了一个不错的入门项目,以了解事情是如何运作的。 - github.com/ddavison/selenium-framework 我使用 jUnit 来实际执行测试。也许这会对它有所启发
-
您不关心错误吗?那么它们是什么确切错误?
-
好吧,老实说,这些错误为您提供了线索。一条线索表明您缺少拼图中的一个重要部分。您将测试导出为 JUnit 测试,但实际上并没有导入 JUnit。下面的答案显示了如何做到这一点。所以不,不要只是忽略这些错误。他们告诉你出了什么问题。