我正在尝试使用Selenium测试复杂的javascript界面(使用Python界面,以及跨多个浏览器).我有许多形式的按钮:
<div>My Button</div>
Run Code Online (Sandbox Code Playgroud)
我希望能够根据"我的按钮"搜索按钮(或者不区分大小写的部分匹配,例如"我的按钮"或"按钮")
我发现这非常困难,在某种程度上我觉得我错过了一些明显的东西.我到目前为止最好的事情是:
driver.find_elements_by_xpath('//div[contains(text(), "' + text + '")]')
Run Code Online (Sandbox Code Playgroud)
但是,这是区分大小写的.我尝试过的另一件事是遍历页面上的所有div,并检查element.text属性.但是,每次你得到表格的情况:
<div class="outer"><div class="inner">My Button</div></div>
Run Code Online (Sandbox Code Playgroud)
div.outer还有"My Button"作为文本.为了解决这个问题,我试图查看div.outer是否是div.inner的父节点,但是无法弄清楚如何做到这一点(element.get_element_by_xpath('..')返回一个元素的父节点,但它测试不等于div.outer).此外,迭代浏览页面上的所有元素似乎非常慢,至少使用Chrome webdriver.
想法?
编辑:这个问题有点模糊.在这里询问(并回答)一个更具体的版本:如何在不包含子元素文本的情况下获取Selenium WebDriver中的元素文本(通过Python api)?
你可以通过孩子来计算
firebase_node.once('value', function(snapshot) { alert('Count: ' + snapshot.numChildren()); });
Run Code Online (Sandbox Code Playgroud)
但我相信这会从服务器中获取该节点的整个子树.对于巨大的列表,这似乎是RAM和延迟密集型.有没有办法获取计数(和/或子名称列表)而不取出整个事物?
在PhantomJS中,webpage.open采用状态参数进行回调,该参数设置为"成功"或"失败".根据文档,如果没有发生网络错误,它将"成功",否则"失败".有没有办法看到导致失败的底层网络错误?
当我把它放在我的浏览器中时,我正在尝试加载的网址工作正常,当我在收到"失败"消息后截取屏幕截图时,我看到我在调用网页之前的页面.打开(所以我可以' t只是忽略失败).我正在使用Phantom进行测试,所以理想情况下,当webpage.open失败时(或者更好但它永远不会失败!),我希望能够轻松获得有用的错误消息.
<div id="a">This is some
<div id="b">text</div>
</div>
Run Code Online (Sandbox Code Playgroud)
获得"这是一些"并非易事.例如,这会返回"This is some text":
driver.find_element_by_id('a').text
Run Code Online (Sandbox Code Playgroud)
一般来说,如何在不包含其子项文本的情况下获取特定元素的文本?
(我在下面提供了一个答案,但是如果有人能提出一个不那么可怕的解决方案,那么问题会保持开放).
我正在尝试为新开发人员在他们的本地开发环境中安装我们的代码库整理文档。我想给他们以下命令:
“npm ci”几乎完全符合我的要求,但似乎没有安装 devDependencies。“npm install”确实会安装 devDependencies,但它有时会修改 package-lock.json。
我可以想象一些像“npm install && git checkout package-lock.json”这样的问题,但我觉得必须有一种更惯用的方式来表达“给我一个干净安装这个项目的开发依赖项?”
有没有人有使用Xtext,Spoofax和JetBrains的MPS等语言工作台工具的经验?我想尝试一下,并且很难找到不同工具的良好比较.各自的优点和缺点是什么?
我正在寻找构建生成python代码的DSL,所以我特别感兴趣的是听到那些使用python这些工具之一的人(这三个看起来都非常注重Java ......为什么会这样?).DLS主要供我自己使用,因此我不太关心构建一个非常漂亮的IDE,而不是关于它是KISS来定义语法和编写代码生成器.对DLS进行类型检查/执行静态分析的能力也非常酷.
我有点害怕走远一条路,撞墙,意识到我的所有代码都采用了无法移植到其他任何地方的格式 - 这些工具是否存在风险?特别是MPS看起来有点可怕,因为据我所知,你并没有真正生成基于文本的语法,而是为AST构建专门的编辑器.
我正在使用Selenium来自动化网页功能测试.在我们推出新代码时,对我们进行逐像素比较非常重要,因此我们使用Selenium来截取屏幕截图并比较base64编码的字符串以查看是否有任何更改.
我们发现在实践中,很难获得完整的像素一致性,特别是对于图像.我希望将较小的模糊/渲染工件视为"通过"而不是"失败",所以我想知道是否有一种方法可以进行模糊比较以使我们的测试不那么脆弱.
我在考虑将base64字符串之间的Levenshtein距离作为一个起点,但我真的不知道这是一个好的方法,还是应该区分"在页面上移动的东西"和"渲染"的公差神器".任何想法/方法?
我正在考虑实现这里描述的in-firebase索引:https://stackoverflow.com/a/10559689/534086,并试图找出如何处理按降序排序数据.如果你有一个带有'a','b','c'的节点来检索'c','b','a'是否可能?(虽然仍然能够以原始顺序检索它们吗?)
如果无法向前和向后遍历节点并且我需要创建两个索引,那么它们是一种简单的算法,用于生成按反向词法顺序排序的密钥吗?对于数字,我认为你可以乘以-1,但不知道如何处理字符串...
我有一种情况,在我的nodejs服务器上,我想定期调用一个非常大的对象树上的.once('value',..).
我希望树上会有很多小的变化.我想确保每次更改它时我都不会抓取整个树,或者我想要阅读它.
如果我设置了一个.on('value',function(){//什么都不做})回调,那么是否会将树缓存在内存中,以便只将更改发送到我的服务器而不是整个事件?
我试图将四个元素放在父元素的四个角上.父元素有一个边框,其大小动态变化.我想定位元素,使它们触及边框的外边缘,最好是这样做,以便在边框改变大小时我不必担心做某事.
使用绝对定位,我能够让它们相对于边界内部定位:http://jsfiddle.net/V5jFx/1/
然而,我无法弄清楚如何相对于外部做到这一点.
这四个角元素不是父元素的子元素,并且我愿意使用javascript,但我真的更愿意不必检测边框大小的变化.
当我为我的 EC2 实例查询 Cloudwatch API 的 CPUUtilization 时,每个返回的数据点都有一个“时间戳”属性。此时间戳是否代表此数据点聚合期的开始、中间或结束?
例如,如果我在 5 分钟内进行查询,那么时间戳为上午 10:00 的数据点是否代表上午 9:55 - 10:00 或上午 10:00 - 10:05 之间的 CPU 平均值?
我检查了数据点类型的文档(https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Datapoint.html),它只是说时间戳是“用于数据点的时间戳。 ”
firebase ×3
selenium ×3
python ×2
amazon-ec2 ×1
comparison ×1
count ×1
css ×1
css-position ×1
database ×1
dsl ×1
dsl-tools ×1
html ×1
javascript ×1
jquery ×1
mps ×1
npm ×1
npm-ci ×1
npm-install ×1
phantomjs ×1
testing ×1
workbench ×1
xtext ×1