- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我使用 SeleniumHQ 记录我的操作,然后将它们导出到 Java Unity WebDrive。然后我编辑了导出的代码并添加了许多额外的小东西,比如遍历数组、时间戳等。
我的代码执行以下操作:
我尝试过使用 FirefoxDriver
和 HtmlUnitDriver
,但它们中的每一个都给我带来了这个奇怪的问题。我的代码开始工作并随机停在随机位置并永远卡在那里。
例如,它可以登录 -> 转到配置文件 -> 删除上一个然后停止,或者它可以在登录时挂起。我一遍又一遍地循环这些步骤,我循环得越多,就越有可能卡住。
第一个循环的成功率为 90%,第二个循环的成功率为 40% 左右,等等。我使用的 Driver
也会影响这一点。它很可能与 HtmlUnitDriver
一起挂起,我真的很想使用 HtmlUnitDrive
因为我想在 Ubuntu Server 上 headless 运行我的代码。
有没有人遇到过类似的问题?
编辑: 经过数小时的测试后,我注意到挂起的只是 HtmlUnitDriver
而不是 Firefox。使用 Firefox 时,我可以看到它在做什么,它正在做它应该做的一切。 HtmlUnitDriver
出现问题。
这里是代码本身:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.TimeUnit;
import org.junit.*;
import static org.junit.Assert.*;
import org.openqa.selenium.*;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
public class WebUpdater {
private WebDriver driver;
private String baseUrl;
private boolean acceptNextAlert = true;
private StringBuffer verificationErrors = new StringBuffer();
@Before
public void setUp() throws Exception {
driver = new HtmlUnitDriver(true); // JavaScript enabled.
baseUrl = "http://exampleurl.com";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
@Test
public void testUnity() throws Exception {
openAndLogin();
gotoProfile();
deletePreviousPost();
uploadPost();
logOut();
System.out.println("Done!");
}
private void openAndLogin() {
driver.get(baseUrl);
driver.findElement(By.linkText("Login")).click();
driver.findElement(By.id("jsid-login-id")).clear();
driver.findElement(By.id("jsid-login-id")).sendKeys("bilgeis.babayan@gmail.com");
driver.findElement(By.id("jsid-login-password")).clear();
driver.findElement(By.id("jsid-login-password")).sendKeys("volume1991");
driver.findElement(By.cssSelector("input.right")).click();
}
private void gotoProfile() {
driver.findElement(By.cssSelector("img[alt=\"Profile\"]")).click();
}
private void deletePreviousPost() {
try {
driver.findElement(By.cssSelector("img[alt=\"ExampleName\"]")).click();
driver.findElement(By.linkText("Delete")).click();
assertTrue(closeAlertAndGetItsText().matches("^Confirm to delete this post[\\s\\S]$"));
} catch (Exception e) {
System.out.println(e);
}
}
private void uploadPost() {
driver.findElement(By.linkText("ExampleAction")).click();
driver.findElement(By.id("example_url")).clear();
driver.findElement(By.id("example_url")).sendKeys("Example text that gets typed in textfield.");
driver.findElement(By.cssSelector("input[name=\"example\"]")).clear();
driver.findElement(By.cssSelector("input[name=\"example\"]")).sendKeys("ExampleName");
driver.findElement(By.linkText("ExampleAction2")).click();
System.out.println("Done");
}
private void logOut() {
driver.get("http://exampleurl.com/logout");
System.out.println("Logged out.");
}
@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 String closeAlertAndGetItsText() {
try {
Alert alert = driver.switchTo().alert();
if (acceptNextAlert) {
alert.accept();
} else {
alert.dismiss();
}
return alert.getText();
} finally {
acceptNextAlert = true;
}
}
}
在我的主类中,我这样调用 WebUpdater 类:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Main {
public static void main(String[] args) {
Logger logger = Logger.getLogger("");
logger.setLevel(Level.OFF);
scan();
}
private static void scan() {
while (true) {
try {
// Test if connection is available and target url is up.
URL url = new URL("http://exampleurl.com");
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.connect();
// Start tests.
WebUpdater updater = new WebUpdater();
updater.setUp();
updater.testUnity();
updater.tearDown();
} catch (Exception ex) {
System.out.println(ex);
}
try {
Thread.sleep(12000);
} catch (InterruptedException e) {
}
}
}
}
最佳答案
我对 HtmlUnitDriver 的体验很糟糕。前段时间我写了测试框架,本来应该在 Hudson 上被解雇的,最后我决定使用 Firefox 驱动程序,它更可预测,更容易调试。关键是,在我的例子中,它是一个充满 javascript 的页面——动态加载的字段等,使用 HtmlUnitDriver 确实是一堆蠕虫。
如果您确实需要使用 HtmlUnitDriver,请尝试调试“pagesource”,Selenium 在“当前”(挂起)时刻可以访问它。
关于java - Selenium HtmlUnitDriver 在随机位置随机挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15180326/
显然,这个问题的答案取决于许多环境因素。 总的来说,我想知道人们对 HtmlUnitDriver 的体验如何。作为一种可靠的工具,可以像其他浏览器一样“信任”浏览网站。 当然,我意识到“其他浏览器的做
我无法让 HtmlUnitDriver 在我尝试访问的页面上查找元素。另一方面,WebDriver 工作正常。两者都使用相同的方法。这是我的代码: import java.util.logging.*
我是这方面的新手,基本上我正在尝试使用 HtmlUnitDriver,这是我的代码: WebDriver driver = new HtmlUnitDriver(); driver.get("http
我创建了一个简单的工厂方法,它以指定的模式创建 HtmlUnitDriver。例如 public static HtmlUnitDriver createHtmlUnitDriver(String b
我在 Java 中使用 HtmlUnit 来处理下拉窗口 (Java)。 我按照用户 skaffman 的建议进行了尝试: WebDriver driver = new HtmlUnitDriver(
我使用 selenium-java-2.32.0 我之前使用过 selenium,但从未使用过 HtmlUnitDriver。 有一个html页面,让它成为localhost/mainPage 我创建
我的问题是如何执行单击元素以从服务器响应获取数据?算法: 1) 单击 div 元素 TEXT1 2) 向服务器发送请求 3) 服务器发送带有修改文本的响应。所以我需要获取修改
我正在尝试让 HtmlUnitDriver 在我的开发环境中工作。作为初学者,我尝试使用最新的 selenium 服务器 jar 从下一页实现示例: http://code.google.com/p/
我正在使用 HtmlUnitDriver 打开链接。这是我的代码: HtmlUnitDriver webDriver = new HtmlUnitDriver(); webDriver.get("so
我有几个使用 Selenium 和 HtmlUnitDriver 运行的测试。有时,当我运行它们并想要单击某个元素或阅读文本时,无法找到该元素。每次抛出异常时,我都会保存页面的代码以用于调试目的。但是
HtmlUnitDriver 在等待页面加载时使用的默认超时是多少? 我可以调用 HtmlUnitDriver API 中的哪些函数来获取超时值? HtmlUnitDriver h = new Htm
我得到未知主机作为 driver.getPageSource() 的返回 public static void main(String[] arg) { HtmlUnitDriver driver =
我得到这样的东西 您好,我正在使用 Selenium Webdriver 抓取网页,我能够获取我的数据,但问题是这直接与浏览器交互,我不想打开 Web 浏览器,而是想按原样抓取所有数据 我怎样才能实现
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
如何使用 HtmlUnitDriver 捕获屏幕截图?我发现当我使用 FirefoxDriver 时可以捕获,但我不想使用 Firefox。因此,请让我知道如何使用 HtmlUnitDriver 捕获
我正在尝试使用 HtmlUnitDriver 登录 marketwatch.com 。我认为该程序永远不会超过登录提示,并且我确实检查了我的电子邮件和密码是否正确...... 非常感谢您愿意帮助我!
我正在为类似于 Ad.fly 的页面开发一个机器人。打开链接后,我想等待五秒钟让页面加载,然后才会出现要单击的按钮。 我想用 HtmlunitDriver 执行它。我尝试了隐式等待和显式等待,但这没有
我的目的是为测试自动化执行 headless 浏览。我在 Java 中使用 selenium webdriver。 现在,问题是脚本在 Firefox 浏览器中运行良好,但在 HtmlUnitDriv
我尝试使用 `driver.get(url) 打开网站: driver = new HtmlUnitDriver(BrowserVersion.CHROME); driver.setJ
我使用 SeleniumHQ 记录我的操作,然后将它们导出到 Java Unity WebDrive。然后我编辑了导出的代码并添加了许多额外的小东西,比如遍历数组、时间戳等。 我的代码执行以下操作:
我是一名优秀的程序员,十分优秀!