我需要操纵文件的内容:
FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
StreamReader sr = new StreamReader(fs);
StreamWriter sw = new StreamWriter(fs);
newString = someStringTransformation(sr.ReadToEnd());
sw.Write(newString);
fs.flush();
fs.Close();
Run Code Online (Sandbox Code Playgroud)
但是,上面附加newString而不是使用新更改覆盖文件.需要这样做,以便在读取写入之间没有其他应用程序可以访问文件,这就是我从FileStream对象创建读取器和编写器的原因.
我知道,你可以创建一个与第二个参数集的StreanWriter虚假描述这里.但是,如上所述创建StreamWriter似乎不是其中一个参数.
我可以使用以下方法对测试失败执行操作:
@After
public void afterTest(Scenario scenario) {
if (scenario.isFailed()) {
/*Do stuff*/
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我需要执行的某些操作取决于抛出的异常以及抛出的上下文。有没有办法获得导致测试失败的 Throwable?例如在 JUnit 中,我会通过扩展 TestWatcher 并在我的测试中添加规则来做到这一点:
@Override
protected void failed(Throwable e, Description description) {
/*Do stuff with e*/
}
Run Code Online (Sandbox Code Playgroud)
但是,cucumber-junit 实施不允许使用规则,因此该解决方案不适用于 Cucumber。
我认为我不需要解释为什么在测试失败时访问抛出的异常会很有用,但是我仍然会提供一个示例:
我的测试环境并不总是稳定的,所以我的测试可能在任何时候意外失败(没有特定的地方我可以尝试捕获异常,因为它随时可能发生)。发生这种情况时,我需要重新安排测试以进行另一次尝试,并记录事件,以便我们可以获得一些关于环境不稳定的良好统计数据(何时、多频繁、多长时间等)
我正在使用 Selenium RemoteWebDriver 在远程 MacBook 上运行用 Java 编写的测试。我使用以下方法最大化浏览器窗口:
driver.manage().window().maximize();
Run Code Online (Sandbox Code Playgroud)
这在 Chrome、Firefox 和 IE11 上 100% 都有效。但是对于 Safari,这似乎有 30% 的时间会失败。我想也许 Safari 可能存在一些额外的同步问题,所以我尝试了:
Thred.sleep(10*1000);
driver.manage().window().maximize();
Thred.sleep(10*1000);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这没有帮助。我收到错误消息:
TimeoutException:等待响应命令“maximizeWindow”超时
有谁知道如何解决这个问题?
编辑:因为它可能很重要,这里是我用来创建驱动程序的 URL 和功能:
DesiredCapabilities caps = DesiredCapabilities.safari();
LoggingPreferences logPrefs;
logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.BROWSER, Level.ALL);
caps.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
RemoteWebDriver driver= new RemoteWebDriver(new URL("http://serverIP/wd/hub"), caps)
Run Code Online (Sandbox Code Playgroud) 我正在尝试以某种方式读取和写入同一文件,以便其他程序无法访问其间的文件:
FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
StreamReader sr = new StreamReader(fs);
StreamWriter sw = new StreamWriter(fs);
newString = sr.ReadToEnd() + "somethingNew";
sw.Write(newString);
fs.Close();
Run Code Online (Sandbox Code Playgroud)
该文件永远不会被写入。如果我调试,我可以看到读取器设法获取文件的内容,但写入器似乎无法写入文件。什么都没发生。
我一直在看这个问题,似乎和我的一样。但是我无法让它工作。
我需要从FileStream对象创建一个StreamWriter并将一些文本附加到该文件.假设正在使用的FileStream对象是使用FileMode.OpenOrCreate和FileAccess.ReadWrite创建的.我有:
using (FileStream fs = GetCurrentFileStream())
{
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("StringToAppend");
sw.Flush();
}
Run Code Online (Sandbox Code Playgroud)
但是,这只是从头开始覆盖文件.如何移动到文件末尾?在创建FileStream之后,是否有一种方法可以将FileMode更改为Append,将FileAccess更改为Write?
编辑:如上所述,我需要使用FileStream对象执行此操作.来自Open existing file的答案,附加一行假设我可以从我没有的文件路径创建一个新的StreamWriter.
编辑2:添加截断版本的GetCurrentFileStream().
public static FileStream GetCurrentFileStream()
{
String fileName = getFileName();
FileStream fs = OpenFileWhenAvailable(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
}
public static FileStream OpenFileWhenAvailable(String fileName, FileMode fileMode, FileAccess fileAccess, FileShare fileShare)
{
int tries = 0;
int timeout = 10 * 1000;
while (true)
{
tries++;
try
{
return new FileStream(fileName, fileMode, fileAccess, fileShare);
}
catch (IOException ex)
{ …Run Code Online (Sandbox Code Playgroud) 我正在为一个 Web 应用程序创建一些性能测试,该应用程序发送的请求类型与浏览器发送到我们的服务器的类型相同。其中一个请求是上传图像的 POST。我查看了这个问题,看起来图像文件的实际内容应该位于请求正文内。然而,当我在 Chrome 中使用 F12 开发工具来检查浏览器在请求中发送的内容时,它看起来像这样:
------WebKitFormBoundaryjHN86sGb89n2HUZOT
Content-Disposition: form-data; name="profileImg[]"; filename="bmp.bmp"
Content-Type: image/bmp
------WebKitFormBoundaryjHN86sGb89n2HUZOT--
Run Code Online (Sandbox Code Playgroud)
我期望看到文件内容的空间是空白的。我期待看到一些看似随机的字符串,代表图像文件的内容。请求中也没有图像的路径,只有文件名,所以我无法准确理解如何上传文件?Chrome 是否只是向我隐藏了数据?
我一直在尝试创建一个像这样的通用 trycatch 方法:
public static void tryCatchAndLog(Runnable tryThis) {
try {
tryThis.run();
} catch (Throwable throwable) {
Log.Write(throwable);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试像这样使用它,则会得到一个未处理的异常:
tryCatchAndLog(() -> {
methodThatThrowsException();
});
Run Code Online (Sandbox Code Playgroud)
如何实现这一点,以便编译器知道 tryCatchAndLog 将处理异常?
我正在使用 Selenium 和 JavaScript 编写测试。我对两者都是新手,对函数式编程和 promise 也是新手。我正在尝试创建一个需要做 3 件事的函数:
我当前的功能不起作用:
var clearAndSendKeys = function(driver, elementIdentifier, sendKeys) {
var returnValue;
driver.findElement(elementIdentifier).then(function(inputField){
inputField.click().then(function() {
inputField.clear().then(function() {
returnValue = inputField.sendKeys(sendKeys);
});
});
});
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
然后将调用该函数,例如:
clearAndSendKeys(driver, webdriver.By.id('date_field'), '14.09.2015').then(function(){
//Do stuff
});
Run Code Online (Sandbox Code Playgroud)
我希望变量returnValue包含来自sendKeys. 但是,该函数clearAndSendKeys在运行 sendKeys 之前返回未定义的变量。我认为这是因为returnValue从未定义为承诺,因此程序不知道它需要等待sendKeys.
我怎样才能让我的函数clearAndSendKeys从 返回承诺sendKeys?我宁愿避免向clearAndSendKeys函数添加回调。
编辑:.then({return data})从代码中删除,因为这是一个错字。
我有一个带有可选字符串参数的方法.需要基于其他输入之一创建此参数的默认字符串值.所以我不能直接在方法参数中定义默认值.我可以将默认值设置为null然后检查它,但是如果提供的字符串实际上为null,则可能会产生一些难以调试的情况.有没有办法检查参数是否实际提供?
public static method(String input1, String input2 = null)
{
if (noSecondParameter())
{
input2 = getDefaultInput(input1)
}
}
Run Code Online (Sandbox Code Playgroud) 当前,我在soap UI中运行的所有常规脚本似乎都使用“ ... \ SoapUI-5.2.1 \ bin”作为工作目录。从这个问题的答案之一,我尝试设置项目的Resource Root属性,但是这对groovy脚本使用的工作目录没有影响。
在SoapUI中创建一个新项目。添加一个测试套件,测试用例和一个Groovy脚本测试步骤。在测试脚本中,只需输入:
log.info new File("").getAbsolutePath()
Run Code Online (Sandbox Code Playgroud)
单击绿色箭头以运行脚本。对我来说,这将始终返回SoapUI安装的bin文件夹的路径。
在像IntelliJ这样的工具中,可以在脚本的运行配置中指定工作目录。这使该工具可以从任何路径开始该过程。除此之外,大多数其他工具会将工作目录默认为项目文件夹,而不是像SoapUI那样的工具安装文件夹。
我当前正在使用一个工作目录变量,该变量传递给脚本中所有相关的路径字符串。使用上面的示例,它看起来像:
String workingDir = "C:/somedir/"
log.info new File(workingDir + "somepath").getAbsolutePath()
Run Code Online (Sandbox Code Playgroud)
尽管此方法有效,但它并不像我使用上述其他工具所能做到的那样优雅。
c# ×4
java ×2
selenium ×2
cucumber ×1
filestream ×1
groovy ×1
http ×1
java-8 ×1
javascript ×1
post ×1
promise ×1
return ×1
safaridriver ×1
soapui ×1