针对将带有html/Javascript的字符串放入SeleniumWebdriver中和在html中引入javascript这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Javascri
针对将带有html / Javascript的字符串放入Selenium Webdriver中和在html中引入javascript这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Javascript Selenium Chrome WebDriver - 处理警报的正确方法、javascript – Selenium WebDriver点击隐藏元素、javascript – 如何使用selenium-webdriver包与SauceLabs?、javascript – 如何使用WebDriverJS捕获Selenium错误等相关知识,希望可以帮助到你。
本文目录一览:- 将带有html / Javascript的字符串放入Selenium Webdriver中(在html中引入javascript)
- Javascript Selenium Chrome WebDriver - 处理警报的正确方法
- javascript – Selenium WebDriver点击隐藏元素
- javascript – 如何使用selenium-webdriver包与SauceLabs?
- javascript – 如何使用WebDriverJS捕获Selenium错误
将带有html / Javascript的字符串放入Selenium Webdriver中(在html中引入javascript)
我在内存中有一个HTML文档作为字符串。它包含一个<script>
带有操纵dom的小脚本的标签。现在,我想将该HTML页面加载到Selenium
Webdriver中,并在脚本对其进行操作后返回该页面。由于我已经在内存中存储了html,因此我不太喜欢将html写入文件并使用加载为文件的想法driver.get("file://path/to/file")
。所以问题是,是否有可能实现我想要的目标。
如果webdriver无法做到这一点,也许还有其他可能性吗?
这里有一个例子:
<html><head><script type="text/javascript">function fill(){ var i = "secret" document.forms[0].elements[1].value=i}</script></head><body onload="fill()"><form method="POST"><input type="hidden" name="he1" value=""><input type="hidden" name="he2" value=""></form></body></html>
显然,我希望网络驱动程序执行dom操作并根据脚本更改形式。
请注意, 这仅是示例。我需要运行的实际脚本要做的事情要复杂得多。
答案1
小编典典如果您不想在无法替换页面内容之前创建文件或加载URL,则始终可以利用支持HTML,CSS和JavaScript
的数据URL功能:
ChromeDriver driver = new ChromeDriver();html_content = """<html> <head></head> <body> <div> Hello World =) </div> </body></html>"""driver.get("data:text/html;charset=utf-8," + html_content)
Javascript Selenium Chrome WebDriver - 处理警报的正确方法
如何解决Javascript Selenium Chrome WebDriver - 处理警报的正确方法?
我正在尝试关闭 selenium 脚本运行时有时会出现的警报。它阻止了我在 try catch 选项中处理的特定 div 的单击选项。发生此异常时,''正在尝试使用驱动程序功能,但它生成,NoSuchAlertError"。
这是我代码的一部分:
let driver = await new Builder()
.withCapabilities(options)
.forbrowser("chrome")
.build();
// .. some other logic like get website etc. ... //
try {
let dataFromButton= await getDataFromButton(driver); // it fails when alert appear on screen
} catch (e) {
let alert = await driver.switchTo().alert(); // it throws NoSuchAlertError
}
Here is my alert popup,that I''m trying to remove - click on cancel button or call escape key would be enough solution for me
是否有任何特殊的,alerts” 应该以其他方式处理而不是我的示例?
解决方法
我终于找到了使用此代码的 chrome 解决方案:
await driver.executeScript(''window.stop();'');
javascript – Selenium WebDriver点击隐藏元素
我知道用硒1我可以这样做如下:
selenium.click(id="idOfHiddenField");
并且这将工作,但是与硒2(WebDriver),这不是.我不想使用jquery来启用或显示隐藏的字段或JavaScript.这是因为大多数测试都在使用xpath.
或者我只需要留下旧的硒,让你点击隐藏的领域?
解决方法
例如:
document.getElementsByClassName('post-tag')[0].click();
上述JavaScript将点击此页面右上方的“Selenium”标签(旁边的问题),即使它被隐藏(假设).
所有你需要做的是通过JavascriptExecutor接口发出这个JS指令,如下所示:
(JavascriptExecutor(webdriver)).executeScript("document.getElementsByClassName('post-tag')[0].click();");
这将使用JS沙箱和综合点击事件来执行点击操作.虽然它破坏了WebDriver用户活动模拟的目的,但是您可以将其用于您的情况下,在您的情况下很好的效果.
javascript – 如何使用selenium-webdriver包与SauceLabs?
解决方法
var webdriver = require('selenium-webdriver'); var sauce = 'http://ondemand.saucelabs.com:80/wd/hub'; var driver = new webdriver.Builder(). usingServer(sauce). withCapabilities({ browserName: 'Chrome',platform: 'Windows 2012',name: 'Sample selenium-webdriver test',username: process.env.SAUCE_USERNAME,accessKey: process.env.SAUCE_ACCESS_KEY }). build(); driver.get('http://www.google.com'); driver.findElement(webdriver.By.name('q')).sendKeys('webdriver'); driver.findElement(webdriver.By.name('btnG')).click(); driver.wait(function() { return driver.getTitle().then(function(title) { return title === 'webdriver - Google Search'; }); },1000); driver.quit();
javascript – 如何使用WebDriverJS捕获Selenium错误
对于我想与之交互的每个元素,我都有这样的代码块
xpath = "//div[@id='gs_lc0']/input[@id='gbqfq']" driver.wait(function(){ return waitForElement(xPath,driver); }); try{ element = driver.findElement(webdriver.By.xpath(xPath)); }catch(e){ console.log("Wait Function False Positive") } element.sendKeys("Let Me Google That For You\n";
用这个函数在wait函数中重复
var waitForElement = function(path,driver){ console.log("try: " + path) try{ driver.findElement(webdriver.By.xpath(path)); }catch (e){ console.log("FAILURE") return false; } console.log("SUCCESS") return true; }
现在这个代码有时会起作用,但是它不会起作用.我觉得等待功能完全不起作用,我只是获得了幸运的网页加载时间.因此,为了测试这个理论,我将try函数添加到代码块中,甚至无法捕获“NoSuchElementError”.所以我的问题首当其冲的是,是否有其他方法来形成tryCatch函数,以便捕获这些错误.
如果想要完整再现,我的代码头部也是如此
var webdriver = require('selenium-webdriver'),element var driver = new webdriver.Builder(). withCapabilities(webdriver.Capabilities.chrome()). build(); driver.get('google.com');
解决方法
但是,为了完整起见,以下是如何处理元素不存在时生成的错误:
var webdriver = require('selenium-webdriver'); var driver = new webdriver.Builder(). withCapabilities(webdriver.Capabilities.chrome()). build(); driver.get('http://www.google.com'); driver.findElement(webdriver.By.id("fofofo")).then(null,function (err) { if (err.name === "NoSuchElementError") console.log("Element was missing!"); }); driver.quit();
然后是第二个参数是一个errback,如果findElement失败则调用它.因为selenium-webdriver以promises运行,所以这就是你必须捕获错误的方法.使用try … catch无法正常工作,因为Selenium没有立即开始工作;您要求Selenium对findElement执行的工作将在未来的未确定时间执行.到那时,JavaScript执行将从你的try … catch中移出.
上面的代码搜索id值为fofofo的元素,该元素不存在且失败.
今天关于将带有html / Javascript的字符串放入Selenium Webdriver中和在html中引入javascript的分享就到这里,希望大家有所收获,若想了解更多关于Javascript Selenium Chrome WebDriver - 处理警报的正确方法、javascript – Selenium WebDriver点击隐藏元素、javascript – 如何使用selenium-webdriver包与SauceLabs?、javascript – 如何使用WebDriverJS捕获Selenium错误等相关知识,可以在本站进行查询。
本文标签: