- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
下面的 javascript 代码获取所有以“opt1”开头的 div 元素的 ID 和内部文本。我正在使用 javascript 执行此操作,因为此 div 是不可见的,并且 webdriver 不支持访问不可见元素。
下面的代码在 irb 上执行时工作正常,但在我运行整个脚本时失败并出现“JavaScript 错误”。我还在 IE 控制台上执行了 javascript 代码,以确保 javascript 正确并且没有错误。
mn = $browser.execute_script <<-JS
var eles = window.frames[1].document.getElementsByTagName('div');
var dom = [];
for ( var i = 0; i < eles.length; i++) {
if (eles[i].id.indexOf("opt1_") === 0) {
dom.push(eles[i].id + "--" + eles[i].innerText);
}
}
return dom;
JS
谁能帮我解决这个问题。
提前致谢..
最佳答案
问题可能出在 Selenium 处理帧的方式上。看起来在尝试对框架执行任何操作时会发生 Javascript 错误 - 即错误的发生是由于:
window.frames[1].document
解决方案 - 在框架上下文中执行 Javascript
一种解决方案是在框架的上下文中运行 Javascript。
假设主页正在使用 iframe(尽管可以用 frame 做类似的事情):
<html>
<body>
<iframe src="test.htm"></iframe>
<iframe src="frame_content.htm"></iframe>
</body>
</html>
并且 frame_content.htm 有一些可见和不可见的 div:
<html>
<body>
<div>irrelevant content</div>
<div id="opt1_visible">visible content</div>
<div id="opt1_hidden" style="display:none;">hidden content</div>
</body>
</html>
然后在 Watir 中,您可以针对框架对象(而不是浏览器)执行脚本(修改为删除 window.frames[1]
):
frame = browser.iframe(:index => 1) # Use .frame if the page is using frames instead
mn = frame.execute_script <<-JS
var eles = document.getElementsByTagName('div');
var dom = [];
for ( var i = 0; i < eles.length; i++) {
if (eles[i].id.indexOf("opt1_") === 0) {
dom.push(eles[i].id + "--" + eles[i].innerText);
}
}
return dom;
JS
p mn
#=> ["opt1_visible--visible content", "opt1_hidden--hidden content"]
解决方案 - 仅使用 Watir
虽然 Watir 无法对不可见元素执行操作,但您仍然可以检查它们。唯一困难的是获取文本,因为 Element#text 仅返回可见文本。解决方法是改用 Element#attribute_value
。
通过执行以下操作,您可以获得与 Javascript 方法相同的结果:
frame = b.iframe(:index => 1) # Use .frame if the page is using frames instead
mn = b.divs(:id => /^opt1_/).map do |div|
"#{div.id}--#{div.attribute_value('innerText')}"
end
p mn
#=> ["opt1_visible--visible content", "opt1_hidden--hidden content"]
请注意 .attribute_value('innerText')
在 IE 中有效。如果您使用的是 Firefox,则需要改为执行 .attribute_value('textContent')
。我相信 Chrome 支持这两个属性。
关于javascript - watir-webdriver - execute_script 抛出 javascript 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25196646/
我在 ruby rspec 中的 javascript capybara 测试中有以下(轻微匿名的)evaluate_script 行: page.execute_script("$('selec
我正在使用 selenium 和 Python,我正在尝试执行一个接受字符串的 JS 函数,如下所示: browser.execute_script("foo('someString')") 这在 s
我正在尝试使用python的selenium包执行网页的javascript功能 我想点击行值 作为 function clearwsInfo(tmpdjbh,tmpsgbh,obj) {
browser.execute_script("window.open('about:blank', 'tab2');") browser.switch_to.window("tab2") brows
我不太清楚selenium中execute_script和execute_async_script之间的区别。 将 python-selenium 中的这个示例放入 pytest 函数中: drive
我不太清楚selenium中execute_script和execute_async_script之间的区别。 将 python-selenium 中的这个示例放入 pytest 函数中: drive
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我正在使用 Selenium 保存网页。单击某些复选框后,网页内容将发生变化。我想要的是单击一个复选框,然后保存页面内容。 (复选框由 JavaScript 控制。) 首先我使用了: driver.f
我正在尝试使用 javascript 而不是 send_keys() 方法来设置 textarea 值。 如文档所述,我应该能够将 webelement 作为参数传递给 execute_script,
我已经使用 selenium 创建了一个脚本来抓取动态生成的文本。我必须使用 selenium,所以在这种情况下我不想使用 xhr。我正在尝试在 selenium 中使用 pseudo selecto
我正在为 robotframework 创建一些自定义关键字,但遇到了一个问题。 如果我给 javascript 一个参数,我就会得到以下关键字,例如: from robot.api.deco imp
我试图返回一串用逗号分隔的很长的网址。该代码在控制台中运行良好,但是当我执行脚本时,ruby 变量 urls_list 为零。 require 'rubygems' require 'selenium
我试图通过接受 cookie 并单击确认来摆脱 cookie 弹出窗口。单击输入“zgadzam się na”没有任何问题,但单击按钮“potwierdź”似乎是不可能的。我的代码: from se
下面的 javascript 代码获取所有以“opt1”开头的 div 元素的 ID 和内部文本。我正在使用 javascript 执行此操作,因为此 div 是不可见的,并且 webdriver 不
在 Python 中使用 Selenium 和 PhantomJS 我需要将输入标签的样式属性设置为“”,因为它设置为“display:None”,这会阻止我在 Selenium 中使用 send_k
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium
使用 ruby 的 Watir gem,我试图单击一个打开 javascript 弹出窗口的按钮,然后单击弹出窗口上的“确定”,但我似乎无法做到这一点。该按钮位于框架中的框架中。我广泛搜索并阅读了
我需要从浏览器自动化脚本向 chrome 扩展发送一个值。 我目前尝试的方式是尝试调用 chrome.runtime.sendMessage来自 selenium 的 API,用于将一些值传递给 ch
我正在使用 Selenium 和 Python,我正在尝试做两件事: 导入外部 javascript 文件并执行其中定义的方法 在字符串上定义方法并在求值后调用它们 这是第一种情况的输出: 测试.js
我一直在用这个功能https://stackoverflow.com/a/48267887/11220889等待下载完成并在完成后返回文件路径。到目前为止,它一直运行良好。 函数 def every_
我是一名优秀的程序员,十分优秀!