我正在开发一个Web应用程序项目,我需要创建一个构建脚本; 我可以从cruisecontrol服务器触发的构建脚本.由于nant没有维持多年,我认为MSBuild是可行的方法.
我需要构建脚本才能
我假设MSBuild将允许我做所有这些事情.但我不知道从哪里开始.有没有人知道一个很好的教程让我开始使用我的构建脚本?
如何在Selenium中获取HTTP状态代码?
例如,我可以测试一下,如果浏览器请求/ user/27并且没有ID = 27的用户,则返回HTTP 404?
我的主要兴趣是Selenium RC,但如果有人知道"正常"硒的答案,我可以很容易地将其翻译成RC.
/皮特
我有一个RequiredFieldValidator
与Display="Dynamic"
我的ASP.NET Web窗体.我已经使用该CssClass
属性为其分配了一个类.我希望使用错误消息显示display: block
,所以我把它放在我的样式表中的css类.
不幸的是,验证器放置一个显示:内联在网页上的元素上,有效地覆盖了我的样式表值.
我可以摆脱它吗?
编辑:
我才意识到为什么这不起作用.在Display="Dynamic"
验证器上设置时,它具有style="display: none"
在渲染时在span标记上设置的效果.然后.net javascript库在none
和之间切换元素的内联样式inline
.这就是动态验证器的工作原理.因此,要将其显示为块元素,我将需要修改客户端事件验证的工作方式.有可能吗?
我有一个使用log4net的组件.我想创建单元测试,验证某些错误条件会导致正确的日志记录.
我认为最好的方法是创建一个ILogAppender实现,例如mock.然后,我会在测试设置期间将log appender添加到log4net,检查测试验证期间写入的内容,并在测试拆解期间再次删除它.
这可能吗?
我有一个遵循MVVM模式的WPF项目.
我有一个包含选项卡控件的控件.选项卡控件绑定到可观察的集合.可观察集合中的每个项目都是要显示的特定标签页面的视图模型.
实现选项卡控件的xaml文件使用数据模板来选择要显示的特定用户控件,具体取决于可观察集合中视图模型的具体类型.
我观察到的奇怪行为是,当我在不同类型的两个选项卡之间进行切换时,会创建一个新的用户控件实例.当我在相同类型的两个选项卡之间进行更改时,WPF会重用相同的用户控件实例,它只会更改控件上的DataContext.
这有一些非常不幸的后果,例如当在相同类型的两个选项卡之间进行切换但具有不同的视觉状态时,则显示视觉状态转换动画,其中不应该显示; 变化应该是即时的.在两个不同类型的选项卡之间进行更改时,也会出现一些异
我是否可以更改此行为,以便选项卡控件将为每个选项卡页面保留一个用户控件实例,而不是在切换到其他选项卡时"销毁"控件.
<UserControl.Resources>
<DataTemplate DataType="{x:Type ViewModels:ConcreteViewModel1}" d:IsDataSource="true">
<Views:ConcreteView1 />
</DataTemplate>
<DataTemplate DataType="{x:Type ViewModels:ConcreteViewModel2}" d:IsDataSource="true">
<Views:ConcreteView2/>
</DataTemplate>
...
</UserControl.Resources>
<Grid x:Name="ControlTabLayoutRoot">
<TabControl Grid.Row="0" x:Name="Main_TabControl"
ItemsSource="{Binding MainTabControl}"
SelectedIndex="{Binding SelectedIndex}"
IsSynchronizedWithCurrentItem="True"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
ItemContainerStyle="{DynamicResource CustomTabItemStyle}"
Style="{DynamicResource CustomTabControl}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource tabItemHeaderConverter}">
<MultiBinding.Bindings>
<Binding/>
<Binding Path="ProtocolName"/>
</MultiBinding.Bindings>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
</Grid>
Run Code Online (Sandbox Code Playgroud) 我有一个网页,我在asp.net文本框上使用jQuery UI datepicker,它位于UpdatePanel内.这是我粗略做的描述
<script type="text/javascript">
$(document).ready( function() { $(".datepicker").datepicker(); } );
</script>
<asp:UpdatePanel ... >
...
<asp:TextBox runat="server" CssClass="datepicker" />
<asp:Button runat="server" />
...
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
当我第一次加载页面时,一切正常.在文本框内单击时,会弹出日期选择器.但是当我单击按钮并执行异步回发时,再次单击该字段时,不再弹出日期选择器.
我知道问题是因为UpdatePanel在更新时完全替换了所有包含的HTML,因此实际上它是一个新的文本字段,尚未使用datepicker功能进行初始化.
我想我不应该在这里使用$(document).ready()初始化我的日期选择器,但是在哪里放置初始化代码的好地方?或者有一种方法可以在AJAX更新后重新触发初始化代码?
我创建了一个简单的WPF应用程序,其中包含TextBox和包含两个按钮的工具栏.
当我单击文本框并按Tab键时,输入焦点将移动到第一个工具栏按钮.再次按下选项卡将输入移动到下一个选项卡按钮.到现在为止还挺好.但是再次按Tab键会将输入焦点移动到第一个工具栏按钮,它应该已移动到文本框中.
因此,一旦工具栏接收到输入焦点,它就会停留在那里,除了使用鼠标之外,您无法移动焦点.
为什么?我该如何解决这个问题呢?
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication1.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<StackPanel x:Name="LayoutRoot">
<ToolBar VerticalAlignment="Top">
<Button Content="Test1" />
<Button Content="Test2" />
</ToolBar>
<TextBox />
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud) 有一段时间我一直在调查Selenium RC,以便对我的Web应用程序进行功能测试.我现在已经找到了一个非常有效的测试策略,我不想放弃Selenium RC(花了几周时间试图找出验证ASP.NET验证控件的好方法).
但是现在我的Selenium RC冒险从POC变成了我实际使用的东西,我遇到了一个问题.这太疯狂了.执行加载页面的单个测试,填写某些字段,然后单击按钮需要执行大小的秒数.当它执行时,我可以很容易地看到每个字段一次填写一个.在Firefox中使用Selenium IDE并不是那么慢.
我找到了这个页面,明确指出Selenium RC很慢http://selenium-grid.seleniumhq.org/how_it_works.html
但那是为什么呢?是因为浏览器正在轮询selenium服务器吗?如果是这样,是否可以修改此轮询间隔?还是有另一个原因.我不习惯远程呼叫需要花费大量时间来执行.
执行一些测试应该花费很长时间,这太可怕了.我可以比单个网页运行10个测试更快地执行我的整个演示文稿(MVP),业务和数据库层测试套件(500多个测试).
我想解析ac#文件.我唯一想要的是确定它是否包含具有特定名称的属性; 只是一个简单的真/假响应.或者更确切地说,因为我在每次运行中检查多个属性,所以提取属性名称列表可能会有所帮助
我认为我可以使用该CodeDomProvider
功能创建一个优雅的解决方案(f#示例):
use reader = new StreamReader(existingFile)
let codeProvider = new CSharpCodeProvider()
let codeUnit = codeProvider.Parse(reader)
Run Code Online (Sandbox Code Playgroud)
不幸的是,该Parse
功能没有实现CSharpCodeProvider
.有没有办法CodeCompileUnit
从源文件中获取?或者还有另一种优雅的方式吗?(我原本希望避免使用正则表达式)?
编辑:我将使用它来自动生成代码.基本上,我将在文件xyz.partial.cs中生成一个部分类.这将生成一个骨架属性.但是,如果我想更改属性的实现,我将剪切该属性并将其粘贴到手动编码的xyz.cs中.在重新创建生成的类时,我希望它跳过生成我已移动到手动编码文件的属性.
因此,反射是不可能的,因为反射将告诉我该属性确实存在,但如果它在一个或另一个文件中定义则不会.
我有一个简单的窗口,包含一个带有圆角半径的外边框和一个带背景的内边框.边框基本上只是我想放置在圆角外边框内的任何类型内容的占位符.
<Window x:Class="TestRunner.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" AllowsTransparency="True"
WindowStyle="None" Background="{x:Null}" >
<Border BorderThickness="2" BorderBrush="Black" CornerRadius="8" >
<Border Background="White">
</Border>
</Border>
</Window>
Run Code Online (Sandbox Code Playgroud)
问题是内部控件没有继承圆角,所以它绘制在圆角的顶部,如下所示:
如何调整外部控件,因此内部控件不会尝试在圆角上绘制.
在内部控件上设置圆角不是一个可行的选项,因为它会导致角半径的可怕重复.
wpf ×3
.net ×2
asp.net ×2
selenium ×2
selenium-rc ×2
asp.net-ajax ×1
binding ×1
c# ×1
focus ×1
jquery ×1
jquery-ui ×1
log4net ×1
msbuild ×1
nunit ×1
toolbar ×1
updatepanel ×1
webforms ×1
wpf-controls ×1