Selenium和c#做自动化时遇到的问题1: Assert 和 DotNetSeleniumExtras包的问题
1.关于IWebElement的text属性
如图所示,PointDatasInRow从页面获取到一组元素,查询其中一个元素的 属性text属性值是有值的,但是直接用“.text” 获取到的值是空。这种情况经过调试发现是概率性出现。这一组元素中有的text有值,有的没有。经过分析发现是由于这一组元素中有的元素是不可见状态。当元素不可见时,获取不到text的值。改用.GetAttribute("innerHTML")的方法,能获取到隐藏元素的text的值。避免了以上问题。
2.关于DataTable的使用。DataTable可以将从excel中读取的数据进行格式化。可以从DataTable使用select方法对数据进行筛选。
如图所示,当数据表的column中出现空格时,如何写select语句呢?
.Select(" [Point Number]=' 1'") 数据列的列名中需要加上中括号,否则筛选不出结果。
3.关于Asser.AreEqual函数比较的两个字符显示是一样,但是比较不通过的问题。
如图所示:报错信息中比较的两个字符串虽然是一样的,但是用Assert.AreEqual() 仍然不通过.把两个字符串 复制到Notepad然后切换编码方式就会发现其中一个字符串中出现了奇怪的字符。初步怀疑是这是两个字符串的编码方式不一样。所以比较不通过。把两个字符串的格式做了处理后比较通过。问题解决。
4.Webdriver.Support 3.11.0 版本 已经不支持 PageFactory 和 ExpectedConditions 类了
解决办法:直接安装
弯路1:将这两个类的实现可以导入项目
https://github.com/DotNetSeleniumTools/DotNetSeleniumExtras
具体方法:
把这两个文件夹拷贝到你目前项目的根目录下,然后导入项目
如果遇到引用的库报错,可以尝试下面的方法 restore nuget packages- unload project- reload projec
然后替换以前的引用命名空间
弯路2:关于这个问题,有更好的方式来解决,可以把这两个SeleniumExtras的项目 编译生成自己的nuget的包,然后发布,原有的项目只需要安装这个包然后加入命名空间就可以正常引用现在已经不支持的类了。具体方法
1.生成包
确定本机有nuget.exe 我是放在c:tools 目录下的。配置环境变量
Cd到生成包的目录
C:\SoftwareCollectionMap\ColdStream\2.0\Main\Test\UI\Selenium\NextGen2017\NextGenUIAutomation\src\PageObjects\bin\Debug nuget add -source "C:\Program Files (x86)\Microsoft SDKs\NuGetPackages" DotNetSeleniumExtras.WaitHelpers.3.11.0.nupkg
发布成功会出现:
Installing DotNetSeleniumExtras.WaitHelpers.3.11.0.nupkg
Successfully added package 'DotNetSeleniumExtras.WaitHelpers.3.11.0.nupkg' to feed 'C:\Program Files (x86)\Microsoft SDKs\NuGetPackages'.然后去查询可以查到发布的包 直接安装就好
删除本机上的发布的包
C:\Program Files (x86)\Microsoft SDKs\NuGetPackages>nuget delete DotNetSeleniumExtras.PageObjects 3.011.0 -source "C:\Program Files (x86)\Microsoft SDKs\NuGetPackages"
实际上官网已经发布了这两个包,之前没注意到。^_^