--变量
DECLARE @Msg VARCHAR(300) = '',
@State INT = 0,
@Count INT =0
IF @AuditState <> 1
BEGIN
SET @State=0
SET @Msg='Start'
SELECT @State State,@Msg Msg
RETURN
END
SELECT @Count=Count(*) FROM SM_OrgTree
WHERE
ItemID LIKE '00100500%'
AND UnitID IN ( SELECT UnitID FROM Data_Unit_B01 WHERE D0169='0501')
AND ItemType ='N'
AND UnitID = (SELECT UnitID FROM WF_JobStep WHERE JobID=@JobID AND JobStepID=1)
IF @count>0
BEGIN
SET @State=0
SET @Msg='GJKCheck'
SELECT @State State,@Msg Msg,@Count Count
RETURN
END
ELSE
BEGIN
SET @State=0
SET @Msg='SGKCheck'
SELECT @State State,@Msg Msg, @State State1,@Count Count
RETURN
END
Selenium2学习笔记:
2403251191@qq.com1
广西-谢恒达
201442 173151
123456a
验证复选框是否勾选
IWebElement checkBox = driver.FindElement(By.Id("pass_loginLite_input_isMem0"));
bool isSelected = checkBox.Selected;
Console.WriteLine("是否勾选:" + isSelected);
Enabled/isEnabled( )用于存储input等元素的可编辑状态,
例如文本框、复选框和单选框的可编辑状态,如果可以编辑,
则返回true,否则返回false。
IWebElement textBox = driver.FindElement(By.Id("lst-ib"));
bool enabled = textBox.Enabled;
Console.WriteLine("是否可编辑:" + enabled);
有时候,即使元素在页面上看不到了,在使用Ctrl+F查看源代码或使用FindElement命令进行查找时,
仍然能找到该元素。这是因为该原素偶然在HTML代码中,只是没有显示出来
(例如该元素的visibility属性为hidden或者display属性为none,它就不会显示到页面上,但它确实存在于该页面),
所以,这个时候用Displayed/isDisplayed()才能验证该元素是否在页面上显示。
IWebElement btn = driver.FindElement(By.Name("btnK"));
bool visiblility = btn.Displayed;
Console.WriteLine("元素是否显示:" + visiblility);
GetAttribute( )方法用于获取指定属性的值,attributeName为属性的名称。
IWebElement btn = driver.FindElement(By.Name("btnK"));
string btnValue = btn.GetAttribute("value");
Console.WriteLine("Google搜索的value属性为:" + btnValue);
对所有弹出的对话框执行点击确定的操作。
driver.SwitchTo().Alert().Accept();
对所有弹出的对话框执行点击取消的操作。
driver.SwitchTo().Alert().Dismiss();
Text/getText()用于获取弹出对话框的文本内容。
driver.SwitchTo().Alert().Text
要在多个窗口之间进行切换,首先必须获取每个窗口的唯一标识符(句柄,
通过WindowHandles属性(用于C#)/getWindowHandles()(用于Java)
可以获取所有打开窗口的标识符,并将其以集合的形式返回。
IWebDriver mainWindow = new FirefoxDriver();
INavigation navigation = mainWindow.Navigate();
navigation.GoToUrl(http://www.baidu.com);
IWebElement btnInMainWindow = mainWindow.FindElement(By.Name("tj_reg"));
btnInMainWindow.Click();
System.Collections.Generic.IList<string> handles= mainWindow.WindowHandles;
for (int i = 0; i < handles.Count; i++)
{
Console.WriteLine(handles[i]);
}
Console.ReadKey();
新窗口弹出后,可以通过它的标识符(句柄)切换到该窗口,再对该窗口的元素进行操作。
IWebDriver mainWindow = new FirefoxDriver();
INavigation navigation = mainWindow.Navigate();
navigation.GoToUrl(http://www.baidu.com);
IWebElement btnInMainWindow = mainWindow.FindElement(By.Name("tj_reg"));
btnInMainWindow.Click();
System.Collections.Generic.IList<string> handles= mainWindow.WindowHandles;
IWebDriver childWindow = mainWindow.SwitchTo().Window(handles[1]);
IWebElement tbxInchildWindow = childWindow.FindElement(By.Id("pass_reg_email_0"));
tbxInchildWindow.SendKeys("12345");
System.Collections.Generic.IList<string> handles = driver.WindowHandles;
//切换到注册窗口
driver.SwitchTo().Window(handles[1]);
System.Threading.Thread.Sleep(3000);
driver.Close();
System.Threading.Thread.Sleep(3000);
//切换到主窗口
driver.SwitchTo().Window(handles[0]);
driver.FindElement(By.Name("tj_reg")).Click();
System.Threading.Thread.Sleep(3000);
driver.Quit(); //测试结束,关闭所有窗口,driver.Close() 关闭窗口
通过Window属性(适用于C#)/window()方法(适用于Java)可以对当前的窗口进行简单的控制,
例如查看窗体的坐标和大小,并将其最大化。
可以编写代码,先打开浏览器,输出其坐标和大小,然后将其最大化,再输出其坐标和大小,
代码如程序清单5-72或程序清单5-73所示。
IWebDriver mainWindow = new FirefoxDriver();
INavigation navigation = mainWindow.Navigate();
navigation.GoToUrl(http://www.baidu.com);
IWindow window = mainWindow.Manage().Window;
//输出其坐标和大小
Console.WriteLine("最大化前,当前window在屏幕上的坐标为:" + window.Position.X + "," + window.Position.Y);
Console.WriteLine("最大化前,当前window在屏幕上的长宽为:" + window.Size.Width + "," + window.Size.Height);
//最大化窗口
window.Maximize();
Timeouts()方法会获得Timeouts对象,Timeouts对象包含以下3个方法。
ImplicitlyWait(),设置脚本在查找元素时的最大等待时间,例如FindElement()和Find Elements()等方法的超时时间。
SetPageLoadTimeout():页面操作超时时间,例如页面进行跳转或刷新的最大等待时间。
例如,使用Navigation对象的各个方法,以及在页面执行某操作后发生跳转或刷新)。
SetScriptTimeout(),设置脚本异步执行的超时时间。
ITimeouts timeouts = driver.Manage().Timeouts();
//将脚本在查找元素时的最大等待时间设置为0小时0分30秒
timeouts.ImplicitlyWait(new TimeSpan(0, 0, 30));
//将页面跳转或刷新的超时时间设置为0小时0分30秒
timeouts.SetPageLoadTimeout(new TimeSpan(0, 0, 30));
//将脚本异步执行的超时时间设置为0小时0分30秒
timeouts.SetScriptTimeout(new TimeSpan(0, 0, 30));
如果想要在执行测试操作时执行自定义的处理或者进行截图,可以使用EventFiring- WebDriver。
IWebDriver driver = new FirefoxDriver();
OpenQA.Selenium.Support.Events.EventFiringWebDriver eventDriver = new OpenQA.Selenium.Support.Events.EventFiringWebDriver(driver);
可以看到,首先需要创建一个常规的WebDriver实例,然后创建EventFiring WebDriver实例,并将常规的WebDriver实例作为参数传入到EventFiringWebDriver的构造函数中。
在IDE中查看EventFiringWebDriver实例的成员,可以看到,与常规的WebDriver实例相比,它多一些事件
Navigating:导航前事件,定义页面在发生跳转前需要执行的代码。
Navigated:导航后事件,定义页面在发生跳转后需要执行的代码。
NavigatingBack:浏览器后退前事件,定义浏览器在执行后退操作前需要执行的代码。
NavigatedBack:浏览器后退后事件,定义浏览器在执行后退操作后需要执行的代码。
NavigatingForward:浏览器前进前事件,定义浏览器在执行前进操作前需要执行的代码。
NavigatedForward:浏览器前进后事件,定义浏览器在执行前进操作后需要执行的代码。
FindingElement:查找元素前事件,定义Selenium在查找元素前需要执行的代码。
FindElementCompleted:找到元素后事件,定义Selenium在找到元素后需要执行的代码。
ElementClicking:单击元素前事件,定义Selenium在单击元素前需要执行的代码。
ElementClicked:单击元素后事件,定义Selenium在单击元素后需要执行的代码。
ElementValueChanging:元素值变更前事件,定义Selenium更改元素的值前需要执行的代码。
ElementValueChanged:元素值变更后事件,定义Selenium更改元素的值后需要执行的代码。
ScriptExecuting:脚本执行前事件,定义脚本执行前需要执行的代码。
ScriptExecuted:脚本执行后事件,定义脚本执行后需要执行的代码。
ExceptionThrown:异常事件,定义在使用Selenium测试发生异常时需要执行的代码。
//*[@id="A0101"]
assertLocation(判断当前是在正确的页面)、
assertTitle(检查当前页面的title是否正确)、
assertValue(检查input的值, checkbox或radio,有值为”on”无为”off”)、
assertSelected(检查select的下拉菜单中选中是否正确)、
assertSelectedOptions(检查下拉菜单中的选项的是否正确)、
assertText(检查指定元素的文本)、
assertTextPresent(检查在当前给用户显示的页面上是否有出现指定的文本)、
assertTextNotPresent(检查在当前给用户显示的页面上是否没有出现指定的文本)、
assertAttribute(检查当前指定元素的属性的值)、
assertTable(检查table里的某个cell中的值)、
assertEditable(检查指定的input是否可以编辑)、
assertNotEditable(检查指定的input是否不可以编辑)、
assertAlert(检查是否有产生带指定message的alert对话框)、
waitForElementPresent (等待检验某元素的存在。为真时,则执行。)
System.Threading.Thread.Sleep(3000); //延迟3秒