我有一个长串测试,sendKeys()需要太长时间.当我试图设置text程序崩溃的值时.我知道Selenium sendKeys()是测试实际用户输入的最佳方式,但对于我的应用程序,它需要花费太多时间.所以我试图避免它.
有没有办法立即设置价值?
看到这个简单的例子:
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
driver.get('http://www.google.com');
// find the search input field on google.com
inputField = driver.findElement(webdriver.By.name('q'));
var longstring = "test"; // not really long for the sake of this quick example
// this works but is slow
inputField.sendKeys(longstring);
// no error but no values set
inputField.value = longstring;
// Output: TypeError: Object [object Object] has no method 'setAttributes'
inputField.setAttributes("value", longstring);
Run Code Online (Sandbox Code Playgroud) 我想在执行此行之前检查元素是否存在:
driver.findElement(webdriver.By.id('test'));
如果test文档中不存在id ,即使在try-block中,也会抛出错误"no such element" .我找到了Java的答案,您可以在其中检查大小是否为0,但在node-js中,这会在我检查大小之前抛出错误.
throw error;
^
NoSuchElementError: no such element
我想在node-js中使用selenium webdriver模块在iframe中选择嵌套的iframe.
例如:
<iframe id="firstframe">
<div id="firstdiv"></div>
<iframe id="secondframe">
<div id="seconddiv"></div>
</iframe>
</iframe>
Run Code Online (Sandbox Code Playgroud)
对于node-js部分:
driver.switchTo().defaultContent();
driver.switchTo().frame("firstframe"); // --> works
driver.switchTo().frame("secondframe"); // --> NoSuchFrameError
iframes = driver.findElements(webdriver.By.tagName('iframe')).then(function(elements){
console.log(elements.length); // --> if I put this code before the switch to first frame output: 1, if I put it after output: 0)
});
Run Code Online (Sandbox Code Playgroud)
我尝试使用索引号,但这也失败了.
编辑:
好吧,我想通了,但我的答案被用户@casparOne因某些原因删除了.如果有人仍然想知道这里的问题是什么:
我上面的代码工作,只是不在本地.Chrome的安全设置拒绝在本地文件的iframe中更深入.因此它甚至没有显示iframe的源代码.
我需要改变我的PhantomJS浏览器是的驾驶硒webdriver的用户代理.
这就是我尝试过的:
var webdriver = require('selenium-webdriver');
var useragent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0";
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.phantomjs("phantomjs.page.settings.userAgent", useragent)).
build();
Run Code Online (Sandbox Code Playgroud)
Web服务器上的结果仍然如下所示:
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.7 Safari/534.34
我在使用Python匹配字符串中的数字时遇到了问题,应该清楚地匹配它.它甚至不匹配[0-9] [\d]或仅仅是0一个人.我的疏忽在哪里?
import re
file_without_extension = "/test/folder/something/file_0"
if re.match("[\d]+$", file_without_extension):
print "file matched!"
Run Code Online (Sandbox Code Playgroud) 我在async/await不等待上一个声明时遇到了问题。我正在尝试读取JSON文件,然后尝试操纵结果对象。尽管有一个数组,但它在执行下一个功能时仍未定义await。
function initJson(file) {
let obj;
fs.readFile(file, 'utf8', (err, data) => {
if (err) {
throw err;
}
try {
const obj = JSON.parse(data);
console.log(obj);
}
catch (err) {
throw err;
}
});
return obj;
};
filterItemForKeyValue = function filterItemForKeyValue(obj, k, v) {
if (typeof obj !== 'undefined' && obj) {
return obj.filter(item => item[k] !== v);
}
return false;
};
async function handleFavorites(file) {
let favorites = await initJson(file);
favorites = await filterItemForKeyValue(favorites, 'delete', true); …Run Code Online (Sandbox Code Playgroud) node.js ×5
javascript ×4
selenium ×3
arrays ×1
async-await ×1
iframe ×1
json ×1
phantomjs ×1
python ×1
regex ×1
user-agent ×1